Awk在不删除文件

时间:2016-05-02 16:07:04

标签: bash awk

我正在使用以下代码修改文件的内容。

awk '$1 ~ /command/ { s = ""; for (i = 2; i <= NF; i++) s = s $i " "; print $1 " " "text I am inserting after command" " " s }' file

我发现这个命令单独输出(到屏幕)只有我告诉它要做的文件的更改。

我尝试修改命令将更改写回文件。

awk '$1 ~ /command/ { s = ""; for (i = 2; i <= NF; i++) s = s $i " "; print $1 " " "text I am inserting after command" " " s }' file  > tmp && mv tmp file. 

然而,这会产生不必要的副作用,即删除awk未被告知要处理的文件中的其他所有内容。我如何使用awk进行这些更改,输出更改并输入回文件而不删除我需要的文件中的其他所有内容?我是否正在使用正确的解决方案,还是需要尝试其他方法?

注意:我使用的是旧版本的awk,它不支持inplace mods,我们无法轻松更新。

1 个答案:

答案 0 :(得分:5)

只需将print移至<condition> { <action> }块之外,即可无条件执行此操作:

awk '$1 ~ /command/ { s = ""; for (i = 2; i <= NF; i++) s = s $i " "; $0 = $1 " text I am inserting after command " s } 1' file > tmp && mv tmp file

我不明白你试图用那个循环做什么,因为它没有意义所以我只是把它留下来。如果你发布一些简洁,可测试,样本输入和预期输出,你也会得到帮助。

我有一丝灵感, MAY 就是你要做的事情:

awk '$1 ~ /command/ { $1 = $1 " text I am inserting after command" } 1' file > tmp && mv tmp file

如果不编辑您的问题以包含输入/输出。