Linux 多种方式实现行转列

发布于:2025-06-27 ⋅ 阅读:(13) ⋅ 点赞:(0)


一. 前提

⏹之前在这下面篇文章中使用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=200

123456 SPLREQUEST 内容2 BBB memberID=2 eventController=event2
123444 SPLREQUEST 内容3 CCC memberID=3 eventController=
123434 SPLREQUEST 内容4 DDD memberID=  eventController=event4

123444 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=event6

674545 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用法整理文章

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

网站公告

今日签到

点亮在社区的每一天
去签到