現状では、タブで区切られたデータを次のように配置しています (わかりやすくするためにヘッダーを追加しています)。
EntryID GroupID Result
039848 00100 Description 1
088345 00200 Description 2
748572 00435 Description 3
884938 00200 Description 2
000392 00200 Description 3
008429 00100 Description 4
私がやろうとしているのは、データをグループに凝縮することです。列 A がグループ ID (重複なし) であり、列 B がそのグループに関連付けられているすべての説明の組み合わせであるテーブルを出力したいと考えています。出力例は次のようになります。
00100 Description 1 | Description 4
00200 Description 2 | Description 2| Description 3
00435 Description 3
グループ ID をパラメーターとして指定して、一度に 1 行を生成する awk コマンドを作成しようとしました。
$ awk -F '\t' '/00100/ { print $2 '\t' $3 }' table.txt > output.txt
これは機能しますが、各ヒットは次のように改行に出力されます
00100 Description 1
00100 Description 2
etc
ORSを代替文字に指定するか、printではなくprintfを使用することでこれを解決できると思いますが、これらのいずれかを試してみると
$ awk -F '\t' 'BEGIN {ORS = '\t'} /00100/ { print $2 '\t' $3 }' table.txt > output.txt
or
$ awk -F '\t' '/00100/ { printf $2 '\t' $3 }' table.txt > output.txt
出力に実際に変更はありません。
それが解決したら、もう 1 つの問題は、これを繰り返すグループが何千もあるということです。データに存在するすべてのグループ ID のリストが別のファイルに保存されています。各 ID の awk へのフィードを自動化したいと考えています。
同様の方法で、ID を grep にフィードするために使用されているコマンドを変更しようとしましたが、ハングするだけなので、それもうまくいきませんでした。
$ for i in `$ cat groupIDs.txt`; do awk -F '\t' '/$i/ { print $2 '\t' $3 }' table.txt' >> test_results.txt ; done;
これらの問題を解決する方法はありますか?