在Bash中将多行字符串转换为单个逗号分隔的列表
问题描述:
我有这种格式:
host1,app1
host1,app2
host1,app3
host2,app4
host2,app5
host2,app6
host3,app1
host4... and so on.
我需要这样的格式:
host1;app1,app2,app3
host2;app4,app5,app6
我对此感到厌倦:awk -vORS=, '{ print $2 }' data | sed 's/,$/\n/'
它给了我这个:
I have tired this: awk -vORS=, '{ print $2 }' data | sed 's/,$/\n/'
and it gives me this:
app1,app2,app3
,没有主机在前.
我不想显示重复的内容.
I do not want to show duplicates.
我不想要这个:
host1;app1,app1,app1,app1...
host2;app1,app1,app1,app1...
我想要这种格式:
host1;app1,app2,app3
host2;app2,app3,app4
host3;app2;app3
答
$ awk '
BEGIN { FS=","; ORS="" }
$1!=prev { print ors $1; prev=$1; ors=RS; OFS=";" }
{ print OFS $2; OFS=FS }
END { print ors }
' file
host1;app1,app2,app3
host2;app4,app5,app6
host3;app1