如何在此AWK命令中保留注释

时间:2016-02-29 22:25:04

标签: bash awk

我有一个压缩文件。我想在第一列将其拆分为多个文件。下面的命令可以做到,但它也会跳过评论。如何在输出中包含标题/注释#?另外,我想将输出保存为“[第1列中的值] .vcf”。我怎么做?

zcat 1000G.vcf.gz | awk '!/^#/{print>$1}'

样本1000G.vcf

# header 1
# header 2
# header 3
1    A    B
1    C    B
1    C    D
2    A    B
2    C    D
2    C    E
3    A    B
3    B    D

我希望awk命令创建3个vcf文件:

1.vcf

# header 1
# header 2
# header 3
1    A    B
1    C    B
1    C    D

2.vcf

# header 1
# header 2
# header 3
2    A    B
2    C    D
2    C    E

3.vcf

# header 1
# header 2
# header 3
3    A    B
3    B    D

1 个答案:

答案 0 :(得分:2)

对于第二个问题,您可以将扩展名连接到第1列值。

awk '!/^#/ { file = $1 ".vcf"; print > file } '

对于标题行,将它们附加到变量。第一次写入文件时,请将注释写入其中。

awk '/^#/ { comments = comments ? comments "\n" $0 : $0 ; next }
     !files[$1] { file = $1 ".vcf"; print comments > file; files[$1] = 1 }
     { file = $1 ".vcf"; print > file }'