2016-07-15 68 views
2

我試圖使用gawk將字段標題添加到文件中。輸入file是製表符分隔的,所以我將其添加到該命令中。如果我將gawk -i inplace替換爲awk,該命令將運行,但file未更新。我知道awk沒有像sed這樣的就地編輯,但是可以使用gawk還是有更好的方法?使用gawk更新制表符分隔的文件

gawk -i inplace ' 
BEGIN {FS = OFS = "\t" 
} 
NR == 1 { 
$1= "Chr" 
$2= "Start" 
$3= "End" 
$4= "Gene" 
} 
1' file 

文件(輸入文件來更新)

chr7 121738788 121738930 AASS 
chr7 121738788 121738930 AASS 
chr7 121738788 121738930 AASS 

期望的輸出

Chr  Start  End   Gene 
chr7 121738788 121738930 AASS 
chr7 121738788 121738930 AASS 
chr7 121738788 121738930 AASS 

我所用的SO Q &甲awk save modifications in place作爲指導,但未能解決我的問題。

回答

1
awk 'BEGIN {print "Chr\tStart\tEnd\tGene"}1' file > newFile && mv newFile file 

輸出

Chr  Start End  Gene 
chr7 121738788 121738930 AASS 
chr7 121738788 121738930 AASS 
chr7 121738788 121738930 AASS 

,因爲它似乎你在添加標題行最感興趣的,只是打印出了什麼事(通過BEGIN塊)前。 1是一個「true」語句,因此所有輸入行都會打印(默認情況下)。如果你想要非awk-gurus能夠理解的代碼,你可以用長手{print $0}替換它。

即使使用-i inplace選項,程序在後臺執行的操作與awk 'code' file > newFile && mv newFile file相同,因此在向文件添加標頭的處理中沒有「節省」。在任何一種情況下都必須重寫該文件。

IHTH

+0

非常感謝您的幫助和解釋,我真的很感激他們:) – Chris

1

它會更有效地只是做:

cat - file <<<$'Chr\tStart\tEnd\tGene' > newfile && mv newfile file 

沒有AWK參與可言。

相關問題