データを転置するファイル処理 [閉じる]

データを転置するファイル処理 [閉じる]

次のIDと名前を含むファイルがあります。

1234|abc|cde|fgh
5678|ijk|abc|lmn
9101|cde|fgh|klm
1213|klm|abc|cde

以下のように、各名前に一致するIDを持つ別のファイルに出力を取得する必要があります。

ファイル1:

abc
1234
5678
1213

ファイル2:

cde
1234
9101
1213

ファイル3:

Klm
9101
1213

ファイル4:

fgh
1234
9101

ベストアンサー1

問題は、2番目、3番目、4番目、..nフィールドのすべての文字列に対してその文字列で始まるファイルを作成し、最初のフィールド文字列に表示されるすべての行を一覧表示することを前提としています。

$ awk -F\| '{
   for(i=2; i <= NF; i++){
        if(!a[$i]){ a[$i] = "file_" ++f; print $i > a[$i] }
        print $1 > a[$i];
   }
}'
1234|abc|cde|fgh
5678|ijk|abc|lmn
9101|cde|fgh|klm
1213|klm|abc|cde
^D
$ for f in file_*; do echo === $f ===; cat $f; done
=== file_1 ===
abc
1234
5678
1213
=== file_2 ===
cde
1234
9101
1213
=== file_3 ===
fgh
1234
9101
=== file_4 ===
ijk
5678
=== file_5 ===
lmn
5678
=== file_6 ===
klm
9101
1213

おすすめ記事