此问题的后续处理-grep and awk, combine commands?
使用
之类的命令awk '/^-/{ print $9 }' file > outputfile
我如何awk文件,并将输出重定向到相同的文件名?
我尝试过
awk '/^-/ {print $9}' outfile.log >outfile.log
..但是生成的outfile.log显示为空。
答案 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