0

目前我有一个系统日志(在这种情况下是 Growl.app),我想不时查看它。我使用 grep 过滤掉我不想看到的行。

cat /Users/Daniel/Library/Logs/Growl.log | grep -vE 'registered|Display frame|Reserving|Used rects|Beginning a pass|Successfully reserved|Adjusted display frame|---|User went idle|User returned|positionDisplay|primaryDirection|Bowtie:|secondaryDirection' | tail -20 > /Users/Daniel/Library/Logs/Growl-log.txt
sleep 2
qlmanage -p /Users/Daniel/Library/Logs/Growl-log.txt

我不确定是否有更好的方法来过滤信息,但因为它是我的脚本需要相当多的时间来处理该命令。我不妨添加我的硬件绝对不会阻止它。需要注意的另一件事是“qlmanage”部分是 OS X 特定的命令,它在“快速查看”窗口中显示文本文件的内容。显示请求时是瞬时的。

有任何想法吗?

4

1 回答 1

2

您要求系统读取一个非常大的、可能持续增长的文件,根据大量搜索删除一堆记录(每次交替:|z|c|V ..etc)。每次你要求它运行时,它都必须通过更多的记录。

日志有时间戳吗?结合时间戳(甚至更好,tail)、grep,您可以每天或每小时为您运行一个作业,在一个小得多的文件中包含您想要的内容。

基本上,您无法在几秒钟内完成您所要求的所有操作,读取 100 的 MB。让我们从 tail 开始,它通过定位文件指针而不是读取整个文件来工作。快点。

tail -20000 /Users/Daniel/Library/Logs/Growl.log | 
grep -vE 'registered|Display frame|Reserving|Used rects|Beginning a pass|Successfully reserved|Adjusted display frame|---|User went idle|User returned|positionDisplay|primaryDirection|Bowtie:|secondaryDirection' |
> /Users/Daniel/Library/Logs/Growl-log.txt
qlmanage -p /Users/Daniel/Library/Logs/Growl-log.txt

调整 20000 以获得合理数量的通过过滤器的样本。换句话说prefilter,通过删除您无论如何都会投放的早期记录来保存文件。

另一个加速是做一个积极的搜索 - grep 你想要什么,而不是你不想要什么。

恭喜你。你也获得了UUOC奖。试试谷歌先生这个词UUOC(与猫有关)。每个人都在了解之前获得了奖项

于 2013-03-17T00:27:12.240 回答