当左侧数据使用 awk 很常见时,我想合并文件的右侧。
输入文件:
cazd0002221|1
cazd0002221|2
ceed0008792|2
croty000287|3
cazd0002221|3
crory000287|3
ceed0008792|1
ceed0008792|2
预期输出为:
cazd0002221|1,2,3
ceed0008792|2,1
croty000287|3
crory000287|3
awk -F"|" '{a[$1]=a[$1]","$2;next}END{for(i in a)print i"|"substr(a[i],2)}' your_file
测试如下:
> cat temp
cazd0002221|1
cazd0002221|2
ceed0008792|2
croty000287|3
cazd0002221|3
crory000287|3
ceed0008792|1
ceed0008792|2
> awk -F"|" '{a[$1]=a[$1]","$2;next}END{for(i in a)print i"|"substr(a[i],2)}' temp
cazd0002221|1,2,3
ceed0008792|2,1,2
crory000287|3
croty000287|3
您的输入中有重复行。
如果您想消除该重复行,ceed0008792|2
这就是为什么输出有此行的原因 ,然后执行以下操作:ceed0008792|2,1,2
> sort -u temp | awk -F"|" '{a[$1]=a[$1]","$2;next}END{for(i in a)print i"|"substr(a[i],2)}'
cazd0002221|1,2,3
ceed0008792|1,2
crory000287|3
croty000287|3
这可能对你有用(排序和 GNU sed);
sort file | sed ':a;$!N;s/^\(\([^|]*|\).*\)\n\2/\1,/;ta;P;D'