将AWK输出重定向回输入文件

时间:2017-08-03 06:18:43

标签: awk

考虑bash命令,其中file是一个非空行的文件。

awk '{print "stuff"}' file >> file

这似乎应该执行以下操作:awk读取一行文件,写入" stuff"到它,然后进入下一行,此时,它应该再次写入文件,依此类推到无穷大。但是,它只是在写完一次后终止。为什么是这样?这是文件系统的属性,unix管道还是awk?

1 个答案:

答案 0 :(得分:1)

它有效,你只需要一个更大的文件:

$ echo foo > foo
$ awk '{print $1}' foo >> foo
$ wc -l foo
2 foo

可是:

$ for i in {1..4096} ; do echo $i ; done >> foo
$ awk '{print $1}' foo >> foo
^C
$ wc -l foo
19429617 foo

在此示例中使用GNU awk。我假设它(GNU awk)打开文件并读取一整个数据块,而不只是一个记录。如果小于或等于一个块数据量的大小,则会从读取中关闭文件。如果还有更多,它会保持文件打开以供读取,直到EOF并继续追加到它的末尾。