我必须根据列标题将矩阵文件拆分为多个文件。
输入:
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' ...
以便在数据中正确保留所有空格。