如何使用awk格式化输出文件

时间:2018-06-01 23:21:23

标签: shell awk

我从shell脚本

获得以下格式的以下输出文件
data  text1

data1 text2

data3 text4,text5,text6,text7,text8,text9,text10,text12,text11,text13

data4 text53

data23 text45,text65,text98,text65`

想要更改输出的格式,如下所示,以便更具可读性

data   text1

data1  text2

data3  text4

data3  text5

data3  text6

data3  text7

data3  text8

data3  text9

data3  text10

data4  text53

data23 text45

data23 text65

data23 text98

data23 text65

请告知如何使用awk / sed实现相同目的? 试图查找awk命令,但没有得到任何线索,任何帮助将不胜感激 感谢

3 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

output | gawk '{split($2, a, /,/); for (i=1; i <= length(a); i++) {printf "%s %s\n\n", $1, a[i]}}'

其中output是脚本生成的输出。

或者,你可以这样运行:

gawk '{split($2, a, /,/); for (i=1; i <= length(a); i++) {printf "%s %s\n\n", $1, a[i]}}' output_file

修改@Ed Morton指出的错误并将awk替换为gawk,因为length(array)是GNU扩展名。

答案 1 :(得分:1)

$ awk -F'[ ,]+' '{for (i=2;i<=NF;i++) print $1, $i ORS}' file
data text1

data1 text2

data3 text4

data3 text5

data3 text6

data3 text7

data3 text8

data3 text9

data3 text10

data3 text12

data3 text11

data3 text13

data4 text53

data23 text45

data23 text65

data23 text98

data23 text65

答案 2 :(得分:0)

您可以使用

折叠一行
sed -r 's/([^ ]* +)([^,]*),(.*)/\1\2\n\n\1\3/g' file

重复它需要一个标记跳跃

sed -r ': a;s/([^ ]* +)([^,]*),(.*)/\1\2\n\n\1\3/g; t a' file