我有一个如下所示的输入文件:
aaa 111
aaa 222
aaa 333
bbb 444
bbb 555
我想创建一个如下所示的转置输出文件:
aaa 111,222,333
bbb 444,555
如何使用awk
,sed
等进行此操作?
答案 0 :(得分:2)
使用awk
的一种方式:
$ awk '{a[$1]=a[$1]?a[$1]","$2:$2}END{for(k in a)print k,a[k]}' file
aaa 111,222,333
bbb 444,555
如果awk
的实施不支持三元运算符,那么:
$ awk 'a[$1]{a[$1]=a[$1]","$2;next}{a[$1]=$2}END{for(k in a)print k,a[k]}' file
aaa 111,222,333
bbb 444,555
你的新文件不会对脚本造成任何问题,你得到了什么输出?我怀疑它可能是一个行结束问题。运行dos2unix file
以修复结束行。
$ cat file
APM00065101435 189
APM00065101435 190
APM00065101435 191
APM00065101435 390
190104555 00C7
190104555 00D1
190104555 00E1
190104555 0454
190104555 0462
$ awk '{a[$1]=a[$1]?a[$1]","$2:$2}END{for(k in a)print k,a[k]}' file
APM00065101435 189,190,191,390
190104555 00C7,00D1,00E1,0454,0462
答案 1 :(得分:0)