我正在使用以下代码修改文件的内容。
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,我们无法轻松更新。
答案 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
如果不编辑您的问题以包含输入/输出。