列ヘッダーに基づいてマトリックスファイルを複数のファイルに分割する必要があります。
入力する:
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' ...
すべてのスペースがデータに正しく保存されるようにタブを使用します。