如何将矩阵文件拆分为单独的文件,并将标题作为文件名?

如何将矩阵文件拆分为单独的文件,并将标题作为文件名?

我必须根据列标题将矩阵文件拆分为多个文件。
输入:

       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' ...以便在数据中正确保留所有空格。

相关内容