同じ列値に基づいて2つの行をマージします。

同じ列値に基づいて2つの行をマージします。

以下のファイルがあります。

47196436 47723284 name1 1.77273

42672249 52856963 name2 1.06061
52856963 430695 name2 1.16667

55094959 380983 name3 1.55613

17926380 55584836 name4 1.02461
3213456 34211 name4 1.11
54321 34211 name4 1.23

最初の2つの列は私のテーブルの主キーに対応しています。同じ名前がある場合は、すべてのキーが同じ行になるように行をマージしようとします。

出力を取得しようとしています。

47196436 47723284 name1
42672249 52856963 430695 name2
55094959 380983 name3
17926380 55584836 3213456 34211 54321 name4

次のコマンドを使用して部分的に達成できました。

awk '{ x[$3]=x[$3] " " $2; } 
END { 
   for (k in x) print k,x[k] >"OUTPUT1";  
}' ccc.txt

しかし、それは私に正しい出力を提供しません。上記のコマンドをさらに修正するには、助けが必要です。

ベストアンサー1

不器用だが仕事を果たしたようだ

awk '$3 != prev {if (NR != 1) print prev; prev=$3; delete a};
!($1 in a){a[$1]++; printf "%s ", $1};
!($2 in a){a[$2]++; printf "%s ", $2}; 
END {print prev}' ccc.txt
47196436 47723284 name1
42672249 52856963 430695 name2
55094959 380983 name3
17926380 55584836 3213456 34211 54321 name4

おすすめ記事