2016-02-29 41 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