如何在此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 列值。

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 }'

最新更新