首页 > 解决方案 > 使用 Shell 脚本将类似表格的文本转换为具有列名的单独值

问题描述

我有一个如下的文本文件:

Execution ID, Unique number, Result 1, Result 2
1234567 , 1002 , Dron,  User suppressed due to Inactivity Rule
1234567 , 1002 , Dron,  User suppressed due to Wrong Email Address
2348976 , 1003 , Dron,  User suppressed due to Language Rule

我希望将上述文本转换如下:

Execution ID: 1234567
Unique number: 1002
Result 1: Dron
Result 2: User suppressed due to Inactivity Rule, User suppressed due to Wrong Email Address

Execution ID: 2348976
Unique number: 1003
Result 1: Dron
Result 2: User suppressed due to Language Rule

标签: shell

解决方案


你可以这样做awk

awk 'BEGIN{FS=", "}NR==1{split($0, h)}NR>1{printf "%s: %s\n%s: %s\n%s: %s\n%s: %s\n\n",h[1],$1,h[2],$2,h[3],$3,h[4],$4}' textfile

这是一个概念证明:

$ awk -V | head -1
GNU Awk 5.0.1, API: 3.0 (GNU MPFR 3.1.6-p2, GNU MP 6.1.2)

$ cat csv 
Execution ID, Unique number, Result 1, Result 2
1234567, 1002, Dron, User suppressed due to Inactivity Rule
2348976, 1002, Dron, User suppressed due to Language Rule

$ awk 'BEGIN{FS=", "}NR==1{split($0, h)}NR>1{printf "%s: %s\n%s: %s\n%s: %s\n%s: %s\n\n",h[1],$1,h[2],$2,h[3],$3,h[4],$4}' csv 
Execution ID: 1234567
Unique number: 1002
Result 1: Dron
Result 2: User suppressed due to Inactivity Rule

Execution ID: 2348976
Unique number: 1002
Result 1: Dron
Result 2: User suppressed due to Language Rule

$ 

推荐阅读