当前位置: 首页 > article >正文

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

http://www.kler.cn/a/600262.html

相关文章:

  • 鸿蒙开发之背景图片的使用
  • CentOS 7 64位安装Docker
  • vue3父子组件传值
  • JavaScript 事件循环
  • JVM中的运行时常量池详解
  • 【QA】Qt有哪些迭代器模式的应用?
  • Vue中的状态管理器Vuex被Pinia所替代-上手使用指南
  • 买卖股票的最佳时机(js实现,LeetCode:121)
  • 【Excel使用技巧】某列保留固定字段或内容
  • 多语言语料库万卷·丝路2.0开源,数据模态全面升级,搭建文化交流互鉴AI桥梁
  • 原子化 CSS
  • 护网面试题总结
  • Java 集合 List、Set、Map 区别与应用
  • 基于Spring Boot + Vue的银行管理系统设计与实现
  • XDP/eBPF来包过滤-已上机验证
  • CSS实现当鼠标悬停在一个元素上时,另一个元素的样式发生变化的效果
  • 《AI Agent智能应用从0到1定制开发》学习笔记:使用RAG技术增强大模型能力,实现与各种文档的对话
  • CSS语言的双向链表
  • 网络运维学习笔记(DeepSeek优化版) 020 HCIA-Datacom新增知识点02 SDN与NFV概述
  • 6(六)Jmeter线程数分段加压