如果您的 shell 是 bash,并且您真的想在 awk 中清空文件:请参阅下面的测试:
kent:/tmp$ seq 3 > a.txt
kent:/tmp$ cat a.txt
1
2
3
kent:/tmp$ awk '{system(">a.txt")}'<<<"foo"
kent:/tmp$ cat a.txt
kent:/tmp$
编辑
好吧,您可以更改为awk '{system("cat /dev/null>a.txt")}'
这个 system() 调用将启动另一个进程,在这种情况下是“cat”来清空文件。
您也可以应用 awk 重定向,正如 Thor 在他的回答中所显示的那样。
但如果你在循环中进行,请注意 awk 重定向。您应该每次关闭文件,printf("") > filename.
否则它会在第一次截断后将所有内容附加到文件中。请参见下面的示例:
kent$ cat a.txt
1
2
3
kent$ awk 'BEGIN{fn="a.txt"}{
printf ("") > fn;
printf("refilled")>fn;
printf("")>fn;
printf("refilled again")>fn;
printf("")>fn}'<<<"foo"
kent$ cat a.txt
refilledrefilled again
如您所见,您可能希望 awk ( printf("")>fn}
) 中的最后一行清空文件,但事实并非如此。