0

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
4

2 に答える 2

1
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
于 2013-03-04T07:06:56.810 に答える
0

これはあなたのために働くかもしれません(sort&GNU sed);

sort file | sed ':a;$!N;s/^\(\([^|]*|\).*\)\n\2/\1,/;ta;P;D'
于 2013-03-04T07:43:55.193 に答える