目录
- 一. 前提
- 二. `xargs` 实现行转列
- 三. `paste` 实现行转列
- 四. `sed` 实现行转列
一. 前提
⏹之前在这下面篇文章中使用sed命令实现了行专列,本篇文章再介绍几种更加简单的方式。
Linux sed案例
👉 20231126-2.log
110120 SPLREQUEST 内容1 AAA memberID=1 eventController=event1
110120 SPLEND ExecTime=200 ResultCode=200
123456 SPLEND ExecTime=300 ResultCode=200123456 SPLREQUEST 内容2 BBB memberID=2 eventController=event2
123444 SPLREQUEST 内容3 CCC memberID=3 eventController=
123434 SPLREQUEST 内容4 DDD memberID= eventController=event4123444 SPLEND ExecTime=200 ResultCode=200
123434 SPLEND ExecTime=400 ResultCode=200
345345 SPLEND ExecTime=500 ResultCode=200
345345 SPLREQUEST 内容5 EEE memberID=5 eventController=event5
674545 SPLREQUEST 内容6 FFF memberID=6 eventController=event6674545 SPLEND ExecTime=400 ResultCode=200
⏹先汇总数据
apluser@FengYeHong-HP:~$ join <(grep SPLREQUEST ./20231126-2.log | sort) <(grep SPLEND ./20231126-2.log | sort) > all.txt
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ cat all.txt
110120 SPLREQUEST 内容1 AAA memberID=1 eventController=event1 SPLEND ExecTime=200 ResultCode=200
123434 SPLREQUEST 内容4 DDD memberID= eventController=event4 SPLEND ExecTime=400 ResultCode=200
123444 SPLREQUEST 内容3 CCC memberID=3 eventController= SPLEND ExecTime=200 ResultCode=200
123456 SPLREQUEST 内容2 BBB memberID=2 eventController=event2 SPLEND ExecTime=300 ResultCode=200
345345 SPLREQUEST 内容5 EEE memberID=5 eventController=event5 SPLEND ExecTime=500 ResultCode=200
674545 SPLREQUEST 内容6 FFF memberID=6 eventController=event6 SPLEND ExecTime=400 ResultCode=200
二. xargs
实现行转列
⏹Linux xargs命令
xargs -L 4
:每4行转为列- 用法更加简洁
apluser@FengYeHong-HP:~$ grep -o -a -e "^\S*" -e "eventController=\S*" -e "memberID=\S*" -e "ExecTime=\S*" all.txt | \
xargs -L 4
110120 memberID=1 eventController=event1 ExecTime=200
123434 memberID= eventController=event4 ExecTime=400
123444 memberID=3 eventController= ExecTime=200
123456 memberID=2 eventController=event2 ExecTime=300
345345 memberID=5 eventController=event5 ExecTime=500
674545 memberID=6 eventController=event6 ExecTime=400
三. paste
实现行转列
⏹Linux paste命令 实现行转列
$(yes - | head -n 4)
:动态添加-
paste -d "," $(yes - | head -n 4)
和paste -d "," - - - -
的作用相同
apluser@FengYeHong-HP:~$ grep -o -a -e "^\S*" -e "eventController=\S*" -e "memberID=\S*" -e "ExecTime=\S*" all.txt | \
paste -d "," $(yes - | head -n 4)
110120,memberID=1,eventController=event1,ExecTime=200
123434,memberID=,eventController=event4,ExecTime=400
123444,memberID=3,eventController=,ExecTime=200
123456,memberID=2,eventController=event2,ExecTime=300
345345,memberID=5,eventController=event5,ExecTime=500
674545,memberID=6,eventController=event6,ExecTime=400
四. sed
实现行转列
⏹sed用法整理文章
- Linux sed案例
- Linux sed命令
apluser@FengYeHong-HP:~$ grep -o -a -e "^\S*" -e "eventController=\S*" -e "memberID=\S*" -e "ExecTime=\S*" all.txt | \
sed ':loop; N; $!b loop; s/\n\([emE]\)/ \1/g'
110120 memberID=1 eventController=event1 ExecTime=200
123434 memberID= eventController=event4 ExecTime=400
123444 memberID=3 eventController= ExecTime=200
123456 memberID=2 eventController=event2 ExecTime=300
345345 memberID=5 eventController=event5 ExecTime=500
674545 memberID=6 eventController=event6 ExecTime=400