我很好奇,在以下情况下更快。 我有大约2MB的输出文件和数千行(在15k – 50k之间的任何地方)。
我正在寻找一个string在文件的末尾(最后10行)左右。 我多次执行此操作,有时使用相同的最后10行文件,以及多个文件。
我很好奇以下哪个是最快最有效的:
tail最后10行,保存为一个variables。 当我需要grep或检查一个string时,在输出中echo该variables和grep
每次我需要grep东西,首先tail输出文件,然后pipe和grep的输出
选项1)
获取Windows中一个巨大文件的最后n行或者字节(比如Unix的尾部)。 避免耗时的select
自停尾部操作
C基本的头部命令
尾巴只有一行的前几个字符
if [ -f "$jobFile".out ]; then { output=$(tail -n 10 "$jobFile".out) !((echo "$output" | grep -q "Command exited with non-zero status" ) || (echo "$output" | grep -q "Error termination via Lnk1e")) && continue { output "$(grep $jobID $curJobsFile)" sed -i "/$jobID/d" "$jobIDsWithServer" } fi
选项2)
if [ -f "$jobFile".out ]; then { !((tail -n 10 "$jobFile".out | grep -q "Command exited with non-zero status" ) || (tail -n 10 "$jobFile".out | grep -q "Error termination via Lnk1e")) && continue { output "$(grep $jobID $curJobsFile)" sed -i "/$jobID/d" "$jobIDsWithServer" } fi
选项3)
if [ -f "$jobFile".out ]; then { !((grep -q "Command exited with non-zero status" "$jobFile".out) || (grep -q "Error termination via Lnk1e" "$jobFile".out)) && continue { output "$(grep $jobID $curJobsFile)" sed -i "/$jobID/d" "$jobIDsWithServer" } fi
在bash脚本中运行tail -f特定的时间
如何cygwin尾巴在c:/ wamp / logs /文件在Windows?
grep文本与通配符inbetween
尾巴-f总是使用inotify?
选项2使用尾巴两次,所以可能会比1稍慢。两者比选项3要快得多。
你可以做的另一件事是:
if [ -f "$jobFile".out ]; then { !(tac "$jobFile".out | grep -E -m1 -q "(Command exited with non-zero status|Error termination via Lnk1e)") && continue { output "$(grep $jobID $curJobsFile)" sed -i "/$jobID/d" "$jobIDsWithserver" } fi
这将以相反的顺序输出文件,grep将在第一次匹配后停止。 此外,它将同时搜索两个搜索条件,如果与第一项不匹配,则不必再次grep两次。
为什么不是这样的:
if tail -f "$jobfile.out" | grep -F -e "Command exited with non-zero status" -e "Error termination via Lnk1e" then output "$(grep $jobID $curJobsFile)" sed -i "/$jobID/d" "$jobIDsWithserver" fi
在不使用正则表达式的情况下,在grep中使用-F标志会使速度更快。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。