2016-07-15 60 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参与可言。

相关问题