Bash 将文本文件中的行分组,并将相应的行聚合到列

Bash 将文本文件中的行分组,并将相应的行聚合到列,bash,awk,Bash,Awk,将文本文件中的行分组,并将相应的行聚合到列 现有文本文件 John|Life John|Temp John|Admin Peter|Life Peter|Admin Matt|Life Matt|Admin Matt|Temp 所需输出 John|Life,Temp,Admin Peter|Life,Admin Matt|Life,Temp,Admin 提前感谢命令 结果 sed解决方案: sed -e ':a;$!{N;ba};:p' \ -e 's/^\([^|\n]*|\)\([^

将文本文件中的行分组,并将相应的行聚合到列

现有文本文件

John|Life
John|Temp
John|Admin
Peter|Life
Peter|Admin
Matt|Life
Matt|Admin
Matt|Temp
所需输出

John|Life,Temp,Admin
Peter|Life,Admin
Matt|Life,Temp,Admin
提前感谢

命令
结果
sed
解决方案:

sed -e ':a;$!{N;ba};:p' \
 -e 's/^\([^|\n]*|\)\([^\n]*\)\(.*\n\)\1\([^|\n]*\)/\1\2,\4\3/' \
 -e 'tp;s/\n*\n/\n/;P;D;bp' filename

我使用
x
存储当前记录的第一个字段。
John|Life,Temp,Admin
Peter|Life,Admin
Matt|Life,Admin,Temp
sed -e ':a;$!{N;ba};:p' \
 -e 's/^\([^|\n]*|\)\([^\n]*\)\(.*\n\)\1\([^|\n]*\)/\1\2,\4\3/' \
 -e 'tp;s/\n*\n/\n/;P;D;bp' filename