我从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命令,但没有得到任何线索,任何帮助将不胜感激 感谢
答案 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