按列拆分大文件,并使用标题中的值作为文件名

按列拆分大文件,并使用标题中的值作为文件名

我有一个很大的制表符分隔文本文件,其中包含标题和数据。我想按列将文件拆分为较小的文件,排除标题,并将文件命名为列名。

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

在标题行上,它将每个字段的值保存在数组中,然后对于其余行,它将每个字段打印到相应的文件名。

相关内容