マトリックスファイルを別々のファイルに分割し、ヘッダーをファイル名として指定するにはどうすればよいですか?

マトリックスファイルを別々のファイルに分割し、ヘッダーをファイル名として指定するにはどうすればよいですか?

列ヘッダーに基づいてマトリックスファイルを複数のファイルに分割する必要があります。
入力する:

       Sample1  Sample2 Sample3 Sample4 Sample5      
id1     GG      GG      GG      GG      GG         
id2     AA      AA      AA      AA      AA            
id3     AA      AG      AA      AA      AA          
id4     AA      AA      AG      AA      AA

期待される出力:(4つの別々のファイル、ファイル名として列ヘッダを含む)

サンプル1

id1 GG
id2 AA
id3 AA
id4 AA

サンプル2

id1 GG
id2 AA
id3 AG
id4 AA

...

答え1

awk 'NR == 1 { for (i = 1; i <= NF; ++i) h[i] = $i; next }
             { for (i = 2; i <= NF; ++i) print $1, $i >h[i-1] }' file

スクリプトawkは最初にヘッダーを配列に保存し、hこれがh[1]最初のヘッダーになるようにします。

入力データの他のすべての行について、その列と一緒に最初の列を適切な名前のファイルに印刷します(iデータ内の列のファイル名はh[i-1])。

プログラムawkは、すべての出力ファイルを同時に開くのに十分なファイル記述子があると仮定します(数百または数千の列が問題になる可能性があります)。

ファイル内のタブを区切り文字として使用する場合は、awk -F '\t' ...すべてのスペースがデータに正しく保存されるようにタブを使用します。

関連情報