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

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

相关文章:

  • 深度技术指南:msvcp140.dll文件丢失的8种修复方案
  • Fiddle快速入门(抓包工具)
  • 蓝桥杯备考:二分答案之数列分段
  • python暴力破解html表单
  • 【网络】网关
  • 【C++】结构体中的 std::string:赋值操作的安全性与 memset和memcpy 的陷阱
  • 将Wi-Fi模块订阅MQTT主题以获取最新的固件版本推送信息
  • NAT 模式
  • Hive根据输入数据量计算reducer的数量,这个输入数据量是map阶段的输出结果还是客户端提交任务时的数据量?
  • MongoDB 面试备战指南
  • 0.http协议详解
  • 地理信息可视化技术大全【WebGIS 教程一】
  • 软考系统架构师论文模版及实例
  • Spring Boot 项目打包运行
  • 项目流程中关键节点的测试类型
  • Spring IOC容器详解:深入理解控制反转与依赖注入
  • MySQL |表的约束
  • Unity Shader编程】之复杂光照
  • Box-Cox变换:让数据服从正态分布的数学魔法
  • node-red s7.net
  • 巴基斯坦总理:希望通过和平对话方式解决与印方问题
  • 未来之城湖州,正在书写怎样的城市未来
  • 国办印发《关于进一步加强困境儿童福利保障工作的意见》
  • 央行谈MLF:逐步退出政策利率属性回归流动性投放工具
  • 红场阅兵即将开始!中国人民解放军仪仗队亮相
  • 虚假认定实质性重组、高估不良债权价值,原中国华融资产重庆分公司被罚180万元