paste
100%

文本操作 · 第 7 课

paste

学习使用 paste 合并对应行,或用可配置的分隔符把多行串成一行。

paste 命令把多行组合成多列。默认情况下,它从每个输入文件各取一行,用制表符连接,再重复此过程,直到所有输入都到达文件末尾。

并排合并文件

创建两个小文件:

$ printf 'alice\nbob\n' > names.txt
$ printf 'admin\nviewer\n' > roles.txt

把两个文件传给 paste

$ paste names.txt roles.txt
alice	admin
bob	viewer

列之间看见的空白是制表符。cat 会依次写出每个完整文件,而 paste 会组合各输入中的对应行。

first.txt 依次包含 ABsecond.txt 依次包含 12paste first.txt second.txt 默认会产生什么?

选择分隔符

使用 -d LIST 替换默认制表符。例如改为冒号:

$ paste -d ':' names.txt roles.txt
alice:admin
bob:viewer

具有 shell 含义的分隔符需要加引号。列表包含多个字符时,paste 可以循环使用它们;构建两列时,单个字符最容易理解。

哪个命令会用冒号连接 names.txtroles.txt 中的对应行?

把一个文件中的多行串成一行

-s 会串行处理每个输入文件,把其中各行连接为一个输出行。创建一个每行一个单词的文件:

$ printf 'The\nquick\nbrown\nfox\n' > words.txt
$ paste -s words.txt
The	quick	brown	fox

-s-d 组合,可以选择分隔符:

$ paste -s -d ' ' words.txt
The quick brown fox

-s 模式下提供多个文件时,每个文件都会成为一个输出行。

哪个命令会把 words.txt 中的所有行连接成一个以空格分隔的输出行?

处理长度不同的输入

并行输入文件行数不同时,paste 会继续运行到最长文件结束。较短文件缺失的值会成为空字段:

$ printf 'A\nB\nC\n' > letters.txt
$ printf '1\n2\n' > numbers.txt
$ paste -d ':' letters.txt numbers.txt
A:1
B:2
C:

并行传给 paste 的某个文件比其他文件更早结束时,会发生什么?

从 stdin 读取一个输入

使用 - 作为文件操作数,可以让该位置从 stdin 读取:

$ printf 'admin\nviewer\n' | paste -d ':' names.txt -
alice:admin
bob:viewer

producer | paste names.txt - 中,- 操作数表示什么?

要练习合并面向行的数据,可以尝试这个动手实验:

  1. 简单文本处理 - 学习使用 trcoljoinpaste 等命令高效操作和分析文本数据。

课程已完成

你已完成 paste

现在,你可以使用可预测的对齐方式和分隔符组合面向行的输入。

  • 合并多个文件中的对应行。

  • 使用 -d 替换默认制表符。

  • 使用 -s 把一个文件中的各行串起来。

  • 理解较短输入产生的空字段。

  • 在某个输入来自 stdin 时使用 -

保存学习进度

创建免费账户即可保存本课进度,并在任意设备上继续学习。

创建免费账户
下一节
返回 文本操作