欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > Linux paste命令

Linux paste命令

2025/3/26 11:26:47 来源:https://blog.csdn.net/feyehong/article/details/146484829  浏览:    关键词:Linux paste命令

目录

  • 一. 简介
  • 二. 基本语法
  • 三. 小案例


一. 简介

paste 命令用于合并多个文件的行,按列方式输出,默认以制表符(Tab)分隔。

⏹基本语法

paste [选项] 文件1 文件2 ...

二. 基本语法

  • <()的方式模拟文件流
  • paste命令将2个文件流粘贴在一起
  • 💥注意:如果是真实文件的话,需要注意换行符是linux系统的换行符LF,而不是Windows系统的CRLF,否则会丢失数据。
apluser@ubuntu24-01:~$ seq 3
1
2
3
apluser@ubuntu24-01:~$ echo -e "A\nB\nC"
A
B
C
apluser@ubuntu24-01:~$ paste <(seq 3) <(echo -e "A\nB\nC")
1       A
2       B
3       C
  • -s:实现行转列
apluser@ubuntu24-01:~$ paste -s <(seq 3)
1       2       3
apluser@ubuntu24-01:~$ paste -s -d "," <(seq 3)
1,2,3
  • -d:指定分隔符
apluser@ubuntu24-01:~$ paste -s <(echo -e "A\nB\nC")
A       B       C
apluser@ubuntu24-01:~$ paste -s -d "_" <(echo -e "A\nB\nC")
A_B_C
apluser@ubuntu24-01:~$ paste -s -d "," <(seq 3) <(echo -e "A\nB\nC")
1,2,3
A,B,C

三. 小案例

⏹有如下日志,现要求将下面的字段抽取出来

  • 线程号
  • isuuePayId
  • jmw_state
apluser@ubuntu24-01:~/work/20250324$ cat system_info.log
2323 SEQIN mmm isuuePayId=5768awe uuid=woenoo; jmw_state=success method=paypay info=ppp
2323 SEQOUT COST=45726
2345 SEQIN mmm isuuePayId=34895ry uuid=;ljkler jmw_state=faile method=alipay info=ddd
2345 SEQOUT COST=34855
2355 SEQIN mmm isuuePayId=544ttf uuid=ouih990 jmw_state=success method=paypay info=iii
2355 SEQOUT COST=857
2370 SEQIN mmm isuuePayId=86nny uuid=ksdfgh999 jmw_state=faile method=linepay info=lll
2370 SEQOUT COST=5453
  • 先通过SEQIN关键词进行初步的过滤
  • 再通过-e配置项将各个指定的字段抽取出来
  • 抽取之后的数据,有若干行,只有1列
apluser@ubuntu24-01:~/work/20250324$ grep "SEQIN" system_info.log | grep -o -e "^\S*" -e "isuuePayId=\S*" -e "jmw_state=\S*"
2323
isuuePayId=5768awe
jmw_state=success
2345
isuuePayId=34895ry
jmw_state=faile
2355
isuuePayId=544ttf
jmw_state=success
2370
isuuePayId=86nny
apluser@ubuntu24-01:~/work/20250324$ grep "SEQIN" system_info.log | grep -o -e "^\S*" -e "isuuePayId=\S*" -e "jmw_state=\S*" > temp.dat
  • 每3行要合并为一行,可以通过split命令指定行数进行切分
apluser@ubuntu24-01:~/work/20250324$ split -l 3 temp.dat part_ --numeric-suffixes --additional-suffix=.log
apluser@ubuntu24-01:~/work/20250324$
apluser@ubuntu24-01:~/work/20250324$ ls -l part_*
-rw-rw-r-- 1 apluser apluser 42 Mar 24 21:24 part_00.log
-rw-rw-r-- 1 apluser apluser 40 Mar 24 21:24 part_01.log
-rw-rw-r-- 1 apluser apluser 41 Mar 24 21:24 part_02.log
-rw-rw-r-- 1 apluser apluser 38 Mar 24 21:24 part_03.log
apluser@ubuntu24-01:~/work/20250324$
apluser@ubuntu24-01:~/work/20250324$ cat part_00.log
2323
isuuePayId=5768awe
jmw_state=success

🧐上面的命令可以通过下面这种方式组合起来使用

  • 其中split -l 3 - part_中的-作为split命令的输入
  • split可以从标准输入读取数据【- 代表标准输入】
grep "SEQIN" system_info.log | grep -o -e "^\S*" -e "isuuePayId=\S*" -e "jmw_state=\S*" | \
split -l 3 - part_ --numeric-suffixes=0 --additional-suffix=.log
  • 然后可以通过paste命令的-s选项进行列转行,并且通过-d选项指定分隔符
apluser@ubuntu24-01:~/work/20250324$ paste -s -d "," part_*
2323,isuuePayId=5768awe,jmw_state=success
2345,isuuePayId=34895ry,jmw_state=faile
2355,isuuePayId=544ttf,jmw_state=success
2370,isuuePayId=86nny,jmw_state=faile

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词