如何使用“awk”多次修改同一行

时间:2013-11-19 11:02:52

标签: awk

我有一个名为score.tsv的文件,内容更像是:

1 jack 100 good
2 tom  50  notgood
....

我希望修改第二行的第四个字段" notgood"到"失败"

awk -F"\t" '{if (NR==2) $4="fail";print > "temp.tsv"}' score.tsv

它有效。

然后我意识到我需要将第二行的第二个字段更改为" lily"太。 所以我试过

awk -F"\t" '{if (NR==2) $2="lily";print > "temp1.tsv"}' temp.tsv

它没有用。

temp1.tsv的内容是

1 jack 100 good
2 tom  50  fail lily
.....

如何逐个更改文件的一行中的字段?感谢

1 个答案:

答案 0 :(得分:3)

问题是,在您的第一个命令nogood->fail中,您没有发现OFS。所以在你的tmp.txt中,它不是<tab>分开的。所以在你的第二个命令中,$2实际上不存在,awk将追加 lily到第二行。

试试这两行:

awk -F"\t" -v OFS="\t" '{if (NR==2) $4="fail";print > "temp.tsv"}' score.tsv
awk -F"\t" -v OFS="\t" '{if (NR==2) $2="lily";print > "temp1.tsv"}' temp.tsv