列ごとにスクリプトを並べ替えて重複を削除する方法

列ごとにスクリプトを並べ替えて重複を削除する方法

ほぼ2000行のファイルがあります。ファイル形式は次のとおりです。

12 34
0 2
2 3
7 9
1 2
306 237
0 9
12 134
2 7
2 9
306 3
  

重複した最初の列を削除し、2番目の列で構成するbashスクリプトを作成しようとしています。次のような結果を期待しています。

0 2 9 
1 2
2 3 7 9
7 9 
12 34 134
306 237 3

いくつかのコードを試しましたが、目的の結果が得られませんでした。どうすればこれを達成でき、何を使うべきですか?

ベストアンサー1

重複行を使用sortおよびuniq削除してから、awk最初の列の値で索引付けされた配列を使用してから、2番目の列を配列の各値に追加できます。次のようになります。

sort test.txt | uniq | awk '{if(col[$1])col[$1]=col[$1]" "$2; else col[$1]=$2;}; END{for (i in col) print i, col[i]}'

test.txt入力ファイルです。

正しい値を持つ配列に新しい列を追加する前に、配列が空であることを確認する必要があります。値の間にスペースを追加するだけです。

おすすめ記事