awk更新现有文件

时间:2019-06-19 17:36:23

标签: unix awk

此问题的后续处理-grep and awk, combine commands?

使用

之类的命令
awk '/^-/{ print $9 }' file > outputfile

我如何awk文件,并将输出重定向到相同的文件名?

我尝试过

awk '/^-/ {print $9}' outfile.log >outfile.log

..但是生成的outfile.log显示为空。

1 个答案:

答案 0 :(得分:3)

您可能正在寻找就地编辑以修改重复文件中提到的相同文件。您的尝试永远不会成功,awk .. file > file因为外壳程序甚至在运行实际命令之前都会处理重定向,因此> file实际上由于空的重定向而截断了文件。因此awk在文件中永远看不到$9的值。

您可能需要mktemp,它会在文件系统中的临时路径下创建一个随机的文件名字符串。您可以将命令输出重定向到这样的文件,然后将其移回原始文件

awk '/^-/ {print $9}' outfile.log >tmpfile && mv tmpfile outfile.log

如果当前目录中有文件名mktemp,则使用tmpfile将解决文件的潜在覆盖/删除问题。

tmpfile="$(mktemp)"
awk '/^-/ {print $9}' outfile.log > "$tmpfile" && mv "$tmpfile" outfile.log

如果使用GNU awk,则可以编写

gawk -i inplace '...' file

这是documented in the gawk manual