用 gawk 更新 tab-delimited 文件 in-place
Update tab-delimited file in-place with gawk
我正在尝试使用 gawk
将字段 headers 添加到文件 in-place。输入 file
是制表符分隔的,所以我将其添加到命令中。如果我仅用 awk
替换 gawk -i inplace
,则命令运行但 file
未更新。我知道 awk
没有像 sed
那样的 in-place 编辑,但是可以使用 gawk
还是有更好的方法?
gawk -i inplace '
BEGIN {FS = OFS = "\t"
}
NR == 1 {
= "Chr"
= "Start"
= "End"
= "Gene"
}
1' file
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 问答 awk
save modifications in place 作为指南,但未能解决我的问题。
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
您似乎最感兴趣的是添加 header 行,只需在任何事情发生之前打印出来(通过 BEGIN
块)。 1
是一个 "true" 语句,因此打印所有输入行(默认情况下)。如果你想要非 awk-gurus 能够理解的代码,你可以用长手 {print [=14=]}
替换它。
即使使用 -i inplace
选项,程序在幕后执行与 awk 'code' file > newFile && mv newFile file
相同的操作,因此在处理添加 header 时没有 "savings"到一个文件。在任何一种情况下都必须重写文件。
IHTH
这样做会更有效率:
cat - file <<<$'Chr\tStart\tEnd\tGene' > newfile && mv newfile file
完全没有 awk 参与。
我正在尝试使用 gawk
将字段 headers 添加到文件 in-place。输入 file
是制表符分隔的,所以我将其添加到命令中。如果我仅用 awk
替换 gawk -i inplace
,则命令运行但 file
未更新。我知道 awk
没有像 sed
那样的 in-place 编辑,但是可以使用 gawk
还是有更好的方法?
gawk -i inplace '
BEGIN {FS = OFS = "\t"
}
NR == 1 {
= "Chr"
= "Start"
= "End"
= "Gene"
}
1' file
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 问答 awk
save modifications in place 作为指南,但未能解决我的问题。
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
您似乎最感兴趣的是添加 header 行,只需在任何事情发生之前打印出来(通过 BEGIN
块)。 1
是一个 "true" 语句,因此打印所有输入行(默认情况下)。如果你想要非 awk-gurus 能够理解的代码,你可以用长手 {print [=14=]}
替换它。
即使使用 -i inplace
选项,程序在幕后执行与 awk 'code' file > newFile && mv newFile file
相同的操作,因此在处理添加 header 时没有 "savings"到一个文件。在任何一种情况下都必须重写文件。
IHTH
这样做会更有效率:
cat - file <<<$'Chr\tStart\tEnd\tGene' > newfile && mv newfile file
完全没有 awk 参与。