我有一个用tab分隔的2TB文本表文件,还有一列用“;”分隔。是的,它实际上是一个非常大的vcf文件。
使用制表符分隔符,我们有8列,并使用“;”分隔符,我们可以将第8列拆分成另外12列。
为了便于统计分析,我需要将文件拆分为19个文件,每个文件包含一列。最好我可以只浏览一次文件(因为文件很大,我有100个大文件,IO成本非常高)并且将19列写入19个单独的文件。
我已经以有效的方式实现了这个问题,基本上是
cut 1-2 file.txt> column12.txt
但要获得这19个列,我需要通过该文件19次并且效率不高。
我想知道是否有一种有效的方式来浏览文件并将其写入19个文件?
非常感谢你的帮助。
文件示例如下所示
a b c d e f g;h;i;j;k
m n o p q l x;y;z;o;p
a b c d e f g;h;i;j;k
a b c d e f g;h;i;j;k
然后我想要文件包含
a
m
a
a
答案 0 :(得分:1)
使用awk:
awk -F '[\t;]' '{for(i=1; i<=NF; i++) print $i >> "column" i ".txt"}' file
使用制表符和分号作为字段分隔符。 NF
包含当前行中最后一列的编号。 $i
包含当前列的内容和当前列的i
个数。
这会创建11个文件。 column11.txt包含:
k p k k