2016-02-29 28 views
1

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

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 
+0

注释行应该放入什么文件? – Barmar

+0

从awk命令中删除** ^#**。 –

+1

@ArifBurhan然后它会在文件名中用'#'创建文件。 – Barmar

回答

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

你知道我如何在输出中保留注释/标题('#')吗? – cooldood3490

+0

你从来没有回答我的问题上面。它应该在哪里得到注释行的文件名? – Barmar

+0

文件名中不应有注释行。我想在每个输出文件中保留注释行。每个输出文件的文件名只应该是[列1的值] .vcf,并且在每个输出文件中,注释/标题('#')应该是相同的。 – cooldood3490