我正在尝试使用gawk
将字段标头添加到文件中。输入file
是制表符分隔的,因此我将其添加到命令中。如果我用gawk -i inplace
替换awk
命令,但file
未更新。我知道awk
没有像sed
那样的就地编辑,但是可以使用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& A awk
save modifications in place作为指南,但未能解决我的问题。
答案 0 :(得分: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
答案 1 :(得分:1)
这样做更有效率:
cat - file <<<$'Chr\tStart\tEnd\tGene' > newfile && mv newfile file
根本没有涉及到awk。