大容量ファイルを列別に分割し、ヘッダーの値をファイル名として使用する

大容量ファイルを列別に分割し、ヘッダーの値をファイル名として使用する

ヘッダーとデータを含むタブで区切られた大きなテキストファイルがあります。ファイルを列ごとに小さなファイルに分割し、ヘッダーを除いてファイル名を列名として指定したいと思います。

pos    red    green    blue
123    0|0    1|0      0|0
321    1|0    1|0      0|0
231    0|0    0|0      0|0
213    0|0    1|0      1|0

ファイルを次のように分割する必要があります。

pos.txt:
123
321
231
213

red.txt:
0|0
1|0
0|0
0|0

green.txt:
1|0
1|0
0|0
1|0

blue.txt:
0|0
0|0
0|0
1|0

私は試した:

awk 'NR==1{h=$0; next}
!seen[$3]++{f=${h[$3]}".txt"; print >> f}' infile

しかし、決して効果がなかった...

答え1

次のことを試すことができます。

awk 'NR==1{for (i=1;i<=NF;i++) a[i]=$i; next}
{for (i=1;i<=NF;i++) {print $i > a[i]".txt"}}' infile

ヘッダー行は各フィールドの値を配列に保存し、残りの行については各フィールドを対応するファイル名で印刷します。

関連情報