1

我发现自己很受挫。我正在尝试将数据从脚本输出到文件。

尽管如此,我只需要保留最后 10 个值,因此附加将不起作用。

主脚本返回一行;所以我把它保存到一个文件中。我使用 tail 获取最后 10 行并处理它们,但随后我到达了文件太大的地步,因为我继续向它附加行(脚本每分钟左右输出一行,这很快就会增加日志的大小。

我想限制我对该脚本执行的写入次数,因此我始终只能保留最后 10 行,而丢弃其余行。

我想过不同的方法,但它们都涉及很多活动,比如创建临时文件,删除原始文件并创建一个新文件,只有最后 10 个条目的尾部;但感觉如此不优雅,非常业余。

是否有一种快速而干净的方式来查询文件,所以我可以添加行直到达到 10 行,然后开始按时间顺序删除行,并在底部添加新行?

也许事情比我想象的要容易,而且有一个我看不到的简单解决方案。谢谢!

4

1 回答 1

3

通常,很难从文件开头删除数据。唯一的方法是用您希望保留的尾部覆盖文件。不过写起来也没那么难看。一种相当合理的技巧是:

{ rm file; tail -9 > file; echo line 10 >> file; } < file

这将保留最后 9 行并添加第 10 行。有很多冗余,所以你可能想做类似的事情:

append() { test -f $1 && { rm $1; tail -9 > $1; } < $1; cat >> $1; }

然后将其调用为:

echo 'the new 10th line' | append file

请注意,这种将输入重定向到与后面的输出相同的文件的技巧有点脆弱和晦涩。脚本完全有可能被打断,删除文件!显式使用临时文件会更安全、更易于维护。

于 2013-09-21T00:10:29.490 回答