Linux 命令:paste

概述

Linux 中的 paste 命令,这个命令的核心作用是将多个文件的内容按列拼接 (横向合并),简单说就是把不同文件的行"并排"显示,区别于 cat 按行拼接(纵向合并),是文本列处理的基础工具,常用于整合多组相关数据。

资料合集:https://pan.quark.cn/s/6fe3007c3e95https://pan.quark.cn/s/561de99256a5https://pan.quark.cn/s/985f55b13d94https://pan.quark.cn/s/d0fb20abd19a

一、基本语法

bash 复制代码
paste [选项] [文件1] [文件2] ...
  • 无文件参数时,默认读取标准输入 (可配合管道 | 使用);
  • 若指定 - 作为文件,代表从标准输入读取内容;
  • 默认用制表符(\t 分隔不同文件的列。

二、核心默认行为

假设有两个文件:

txt 复制代码
# file1.txt 内容(姓名)
张三
李四
王五

# file2.txt 内容(年龄)
25
30
28

执行最简命令:

bash 复制代码
paste file1.txt file2.txt

输出效果(制表符分隔两列):

复制代码
张三	25
李四	30
王五	28
  • 若文件行数不一致,短文件的后续行用空值填充;
  • 多文件拼接时,按"行号对应"规则横向合并。

三、常用选项(重点)

paste 的选项极少但精准,核心围绕"分隔符"和"拼接方向"设计:

选项 作用 实用场景
-d "符号" --delimiters=符号,指定列分隔符(替代默认制表符) 用逗号/空格/竖线分隔,适配CSV/表格输出
-s --serial,将文件内容串行拼接(单行显示) 把多行文本转为单行,用分隔符连接
-z --zero-terminated,用\0替代换行符分隔 处理含特殊换行的文件(如find -print0的输出)

四、经典实操示例(覆盖所有核心场景)

场景1:自定义列分隔符(最常用)

用逗号分隔,生成CSV格式的合并文件,适配表格工具(Excel/Calc):

bash 复制代码
# 逗号分隔,输出到csv文件
paste -d "," file1.txt file2.txt > user.csv

# 查看结果
cat user.csv
# 输出:
# 张三,25
# 李四,30
# 王五,28
场景2:多文件拼接(3个及以上文件)

新增 file3.txt(职业):

txt 复制代码
工程师
产品经理
设计师

用竖线|分隔3列:

bash 复制代码
paste -d "|" file1.txt file2.txt file3.txt
# 输出:
# 张三|25|工程师
# 李四|30|产品经理
# 王五|28|设计师
场景3:串行拼接(多行转单行)

-s将单个文件的多行内容转为单行,分隔符用空格:

bash 复制代码
# 单行显示姓名,空格分隔
paste -s -d " " file1.txt
# 输出:张三 李四 王五

# 多个文件分别串行拼接(每个文件占一行)
paste -s -d "," file1.txt file2.txt
# 输出:
# 张三,李四,王五
# 25,30,28
场景4:配合管道处理命令输出

ls(文件名)和wc -l(文件行数)的结果横向合并:

bash 复制代码
# 先获取当前目录txt文件列表,保存到tmp1
ls *.txt > tmp1
# 统计每个txt文件的行数,保存到tmp2
wc -l *.txt | awk '{print $1}' > tmp2
# 横向合并,用制表符分隔
paste tmp1 tmp2

# 更简洁的管道写法(无需临时文件)
paste <(ls *.txt) <(wc -l *.txt | awk '{print $1}')
场景5:处理行数不一致的文件

file2.txt少1行:

txt 复制代码
# file2.txt 内容
25
30

拼接后短文件补空:

bash 复制代码
paste -d ":" file1.txt file2.txt
# 输出:
# 张三:25
# 李四:30
# 王五:
场景6:从标准输入读取(混合文件+管道)

-代表标准输入,实现"文件内容 + 命令输出"拼接:

bash 复制代码
# 左侧是file1.txt的姓名,右侧是当前时间(每行相同)
cat file1.txt | paste -d "|" - <(date +%Y-%m-%d)
# 输出:
# 张三|2026-01-29
# 李四|2026-01-29
# 王五|2026-01-29

五、与同类命令的核心区别

paste 专注"列合并",与cat(行合并)、join(按关键字合并)的差异清晰:

命令 合并方式 核心逻辑 适用场景
paste 按行号横向列合并 无匹配逻辑,仅行号对应 简单列拼接(如姓名+年龄+职业)
cat 按顺序纵向行合并 追加内容到末尾 合并多个文件的行(如日志片段)
join 按关键字列合并 按指定字段匹配行 关联数据(如用户ID匹配订单)

六、关键注意事项

  1. 分隔符转义 :若需用特殊分隔符(如制表符\t、换行符\n),需用单/双引号包裹,例:paste -d "\t|" file1.txt file2.txt(交替用制表符和竖线);
  2. 空文件处理:拼接空文件时,对应列全为空;
  3. 换行符兼容 :若文件含Windows换行符(\r\n),需先用dos2unix转换,否则拼接后可能出现乱码/错位;
  4. 超大文件paste 逐行处理,内存占用低,可直接处理GB级文本文件。

七、拓展:paste + split 反向操作

split 按列拆分的文件,可通过paste还原:

bash 复制代码
# 第一步:用split按2列拆分(先把单行转多行,再拆分)
echo "a,b,c,d,e,f" | tr ',' '\n' | split -l 2 -d - col_

# 第二步:用paste合并还原为单行(逗号分隔)
paste -s -d "," col_*
# 输出:a,b,c,d,e,f

总结

paste轻量的列合并工具 ,核心价值是按行号横向拼接多文件,日常高频用法:

  1. 基础列拼接:paste -d "分隔符" 文件1 文件2
  2. 多行转单行:paste -s -d "分隔符" 文件
  3. 命令输出+文件拼接:paste -d "分隔符" - <(命令)
  4. 还原split拆分的列文件:paste -s -d "分隔符" 拆分文件*
相关推荐
funnycoffee12317 小时前
linux系统DNS修改命令
linux·运维·服务器·linux dns
小哈里17 小时前
【工具】Linux远程开发核心工具,Git命令缩写与SSH常用命令
linux·git·ssh·工具·远程开发
夏乌_Wx17 小时前
深入理解x86内存寻址:从8086实模式到IA-32段页式映射&Linux内核实现
linux
czxyvX18 小时前
012-Linux简易Shell编写
linux
清漠23318 小时前
win11“网络和Internet“中无“以太网“这个选项解决记录
服务器·网络·数据库
S-码农18 小时前
Linux 进程核心知识
linux
努力努力再努力wz18 小时前
【Linux网络系列】:TCP 的秩序与策略:揭秘传输层如何从不可靠的网络中构建绝对可靠的通信信道
java·linux·开发语言·数据结构·c++·python·算法
袁小皮皮不皮19 小时前
数据通信20-IPv6基础
运维·服务器·网络·网络协议·智能路由器
推理幻觉19 小时前
ssh远程连接错误
运维·ssh
醒醒该学习了!20 小时前
如何将json文件转成csv文件(python代码实操)
服务器·python·json