paste 按列合并
paste 属于 GNU coreutils,把多个文件同一行号的内容并成一行,用分隔符连接,效果相当于把几张表横向拼接。加上 -s 后行为相反:把单个文件的每一行依次串成一行,用来生成逗号分隔列表特别顺手。它不做对齐也不识别字段,纯粹按行拼接,速度很快。
基本信息
| 适用平台 | Linux(GNU coreutils);macOS 自带 BSD 版 |
|---|---|
| 语法 | paste [-d 分隔符] [-s] 文件... |
| 输入约定 | 文件名写 - 表示从标准输入读,可重复出现 |
| 权限要求 | 普通用户,输出到标准输出或重定向文件 |
典型使用场景
- 把姓名清单与分数清单拼成 CSV,省去写脚本遍历
- 把多行 IP 或域名合成一行逗号列表,供配置项直接粘贴
- 给一段纯数据统一加上固定前缀,做成可粘贴的多行命令
- 把两份清单按行号对齐核对,检查哪一行缺失
- 用 -s 把行转成单列,做简单的行列方向转换
常用示例
常用示例
paste -d, name.txt score.txt > report.csv # 按行拼成 CSV
paste -sd, ip.txt # 所有行合成一行,逗号分隔
paste - - < nums.txt # 每两行并成一行
paste -d'\t' host.txt ip.txt > hosts.tsv # 用制表符分隔,便于导入表格
paste -d, f1 f2 f3 # 支持三个及以上文件拼接
paste -s -d+ nums.txt | bc # 把数字串成加法表达式直接求和
wc -l name.txt score.txt # 拼接前先核对两份文件行数选项逐项读法
| 选项 | 作用 | 使用注意 |
|---|---|---|
| -d | 指定各列之间的分隔符 | 给多个字符时分列轮换使用,如 -d',;' |
| -s | 串行模式,把每个文件的行并成一行 | 常用于生成逗号列表 |
| - | 从标准输入读一行 | 写两次即两行并成一行 |
| -z | 以 NUL 而不是换行作为行分隔 | 处理含换行的文件名清单时有用 |
两个文件行数不等时,短的一侧用空列补齐,输出行数等于最长文件的行数。拼接后多出的空字段常被下游误判,先用 wc -l 核对长度最省事。
paste 不做任何对齐和字段识别,别指望它自动匹配共同字段;需要按关键字关联时用 join,需要对齐排版时用 column。