Unix 如何使用awk在右侧数据的基础上组合文件的左侧字段。
如果右侧数据是通用的,我想合并左侧数据。 输入:Unix 如何使用awk在右侧数据的基础上组合文件的左侧字段。,unix,sed,awk,Unix,Sed,Awk,如果右侧数据是通用的,我想合并左侧数据。 输入: DAN|ab NAB|ab PAT|ab DAN|asd DAN|gg NAB|re DAN|rr PAT|rr NAB|sd DAN|we PAT|ww 输出应为: DAN,NAB,PAT|ab DAN|asd DAN|gg NAB|re DAN,PAT|rr NAB|sd DAN|we PAT|ww 如果管道的右侧数据是公用的,则合并左侧数据。 请给我建议解决办法 awk ' BEGIN {FS="|"} {if (vals[$2
DAN|ab
NAB|ab
PAT|ab
DAN|asd
DAN|gg
NAB|re
DAN|rr
PAT|rr
NAB|sd
DAN|we
PAT|ww
输出应为:
DAN,NAB,PAT|ab
DAN|asd
DAN|gg
NAB|re
DAN,PAT|rr
NAB|sd
DAN|we
PAT|ww
如果管道的右侧数据是公用的,则合并左侧数据。
请给我建议解决办法
awk '
BEGIN {FS="|"}
{if (vals[$2]) { vals[$2]=vals[$2]","$1 } else { vals[$2]=$1 } }
END { for (key in vals) { print vals[key]"|"key } }
'
测试:
> cat temp
DAN|ab
NAB|ab
PAT|ab
DAN|asd
DAN|gg
NAB|re
DAN|rr
PAT|rr
NAB|sd
DAN|we
PAT|ww
> awk -F"|" '{a[$2]=a[$2]","$1;next}END{for(i in a)print substr(a[i]"|"i,2)}' temp
DAN|gg
DAN|asd
NAB|sd
NAB|re
DAN|we
DAN,PAT|rr
PAT|ww
DAN,NAB,PAT|ab
另一个:
awk -F\| '{A[$2]=A[$2] (A[$2]?",":x) $1} END{for(i in A)print A[i] FS i}' file
我无法将其与场分离器结合。现在我明白了!!!谢谢
awk -F\| '{A[$2]=A[$2] (A[$2]?",":x) $1} END{for(i in A)print A[i] FS i}' file