菜鸟科技网

Linux paste命令如何合并多文件内容?

paste 命令是一个用于合并文件的实用工具,它将多个文件按行合并,将每个文件的对应行用指定的分隔符连接起来,最后输出到标准输出。

Linux paste命令如何合并多文件内容?-图1
(图片来源网络,侵删)

核心功能

想象一下你有几个文件,它们的内容是按列排列的,而你希望将它们合并成一个文件,每一列都来自不同的源文件。

示例文件:

我们创建三个文件 file1.txt, file2.txt, 和 file3.txt

# 创建 file1.txt
$ echo -e "apple\nbanana\ncherry" > file1.txt
$ cat file1.txt
apple
banana
cherry
# 创建 file2.txt
$ echo -e "red\nyellow\npink" > file2.txt
$ cat file2.txt
red
yellow
pink
# 创建 file3.txt
$ echo -e "10\n20\n30" > file3.txt
$ cat file3.txt
10
20
30

目标: 将这三个文件合并,得到如下格式的输出:

Linux paste命令如何合并多文件内容?-图2
(图片来源网络,侵删)
apple   red     10
banana  yellow  20
cherry  pink    30

paste 命令就是用来完成这个任务的。


基本语法

paste [选项] 文件1 文件2 [文件3 ...]
  • 文件列表: 可以是任意数量的文件。
  • 如果不提供任何文件,paste 会从标准输入读取数据。
  • 如果文件行数不一致,paste 会用空行来补齐较短的文件。

常用选项详解

-d--delimiters

作用:指定合并时使用的分隔符,默认的分隔符是制表符 \t

示例:使用逗号 作为分隔符。

$ paste -d "," file1.txt file2.txt file3.txt
apple,red,10
banana,yellow,20
cherry,pink,30

示例:使用空格作为分隔符。

Linux paste命令如何合并多文件内容?-图3
(图片来源网络,侵删)
$ paste -d " " file1.txt file2.txt file3.txt
apple red 10
banana yellow 20
cherry pink 30

示例:使用多个字符作为分隔符()。

$ paste -d "| " file1.txt file2.txt file3.txt
apple | red | 10
banana | yellow | 20
cherry | pink | 30

-s--serial

作用:将每个文件的所有行合并成一行,而不是按行合并文件,这会将每个文件的内容转换为一列。

示例:将 file1.txt 的所有行合并成一行。

$ paste -s file1.txt
apple   banana  cherry

示例:将多个文件都各自合并成一行,然后横向排列。

$ paste -s file1.txt file2.txt file3.txt
apple   banana  cherry   red     yellow  pink    10      20      30

--help

作用:显示帮助信息并退出。

$ paste --help

--version

作用:显示 paste 命令的版本信息。

$ paste --version

高级用法与技巧

从标准输入读取

当没有提供文件名时,paste 会从标准输入读取数据,这在管道操作中非常有用。

示例:将 ls 的输出和 who 的输出合并。

# ls 的输出
$ ls -1
file1.txt
file2.txt
file3.txt
# who 的输出
$ who
user1  pts/0        2025-10-27 10:00 (192.168.1.100)
user2  pts/1        2025-10-27 10:05 (192.168.1.101)
# 使用 paste 合并
$ (ls -1; who) | paste -d "|" /dev/stdin /dev/stdin
file1.txt|file1.txt
file2.txt|file2.txt
file3.txt|file3.txt
user1  pts/0        2025-10-27 10:00 (192.168.1.100)|user1  pts/0        2025-10-27 10:00 (192.168.1.100)
user2  pts/1        2025-10-27 10:05 (192.168.1.101)|user2  pts/1        2025-10-27 10:05 (192.168.1.101)

注意: /dev/stdin 是一个特殊文件,代表标准输入,这里我们使用它来两次读取标准输入流,以便将 ls -1who 的输出(它们被合并到了一个标准输入流中)再次分开,这个技巧有点绕,但展示了 paste 处理标准输入的能力。

更常见的用法是配合 here documentshere strings

示例:使用 here string

$ paste -d "|" <(ls -1) <(who)
file1.txt|user1  pts/0        2025-10-27 10:00 (192.168.1.100)
file2.txt|user2  pts/1        2025-10-27 10:05 (192.168.1.101)
file3.txt|

这里 <(...) 是进程替换,它会执行命令并将输出当作一个临时文件传给 paste

处理不同长度的文件

paste 会自动处理文件长度不一致的情况,它会用空行来补齐较短的文件。

示例:创建一个长度不同的文件 file4.txt

$ echo -e "grape\norange" > file4.txt
$ cat file4.txt
grape
orange

合并 file1.txt (3行) 和 file4.txt (2行):

$ paste file1.txt file4.txt
apple   grape
banana  orange
cherry  

可以看到,file4.txt 因为只有两行,所以在第三行合并时,它提供了空内容。


paste vs join

pastejoin 都可以合并文件,但它们的目的和用法完全不同。

特性 paste join
合并方式 按行横向拼接,不关心内容。 基于共同的键值进行连接,类似数据库的 JOIN 操作。
排序要求 不需要文件排序。 要求文件已按连接键排序。
用途 将独立的列数据合并成表。 关联两个具有共同字段的表格数据。

join 示例:

假设我们有 sales.txtproducts.txt,它们都有一个共同的 ID 列。

$ cat sales.txt
1  100
2  150
3  200
$ cat products.txt
1  Apple
2  Banana
4  Orange

使用 join 合并:

$ join -t $'\t' sales.txt products.txt
1       100     Apple
2       150     Banana

join 只找到了 ID 为 1 和 2 的匹配项,并将它们合并,而 paste 会简单地把每一行拼在一起,不管 ID 是否匹配。


  • paste 是一个简单但强大的文本处理工具,用于按行合并多个文件
  • 默认使用制表符作为分隔符,可以通过 -d 选项自定义。
  • -s 选项可以将单个文件的多行合并为一行。
  • 它是处理按列存储的数据的利器,常用于数据预处理和报表生成。
  • join 的核心区别在于:paste 是机械的按行拼接,而 join 是智能的基于键值关联。

掌握 paste 命令,能让你在处理文本数据时更加得心应手。

分享:
扫描分享到社交APP
上一篇
下一篇