Shell 如何使用awk格式化输出文件
我有一个shell脚本中的以下格式的输出文件Shell 如何使用awk格式化输出文件,shell,awk,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 tex
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命令,但没有得到任何线索,如有任何帮助,将不胜感激
谢谢您可以使用以下内容:
output | gawk '{split($2, a, /,/); for (i=1; i <= length(a); i++) {printf "%s %s\n\n", $1, a[i]}}'
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扩展。另一个使用gsub
到,
:
$ awk '{gsub(/,/, ORS ORS $1 OFS )}1' file
...
data3 text4
data3 text5
data3 text6
...
但是,如果$1
中包含例如&
,则会出现问题,因为它会被替换为匹配项:
$ cat file
data& text4,text5,text6
$ awk '{gsub(/,/, ORS ORS $1 OFS )}1' file
data& text4
data, text5
data, text6
用另一个gsub
:
$ awk '{gsub(/,/, ORS ORS $1 OFS ); gsub(/,/,"\\&")}1' file
data& text4
data& text5
data& text6
你可以把线折叠一次
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
$awk-F'[,]+'{for(i=2;ithanks@accdias..我正在查找手册页,仍然试图了解下面一行的“$2”是如何被关联的data3text4,text5,text6,text7,text8,text9,text10,text12,text11,text13
,“这行将被拆分成一行$1==“data3”
和$2=”“text4,text5,text6,text7,text8,text9,text10,text12,text11,text13”
。然后拆分($2,a,“,”)
将用逗号分隔的每个$2的值填充数组a
。您的任何评论在这种情况下都会产生任何影响。而且您迟到了12个半小时。不用担心,我为我的不良行为道歉。您的评论非常受欢迎,@Ed Morton。您真的希望在每个输入行之间都有一个空行,并且在输出中也有相同的内容吗Ed:你好,ED?我不需要在输出之间的空行,但是如果它有大量的记录,它将是很好的使它更可读。
$ 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