gpt4 book ai didi

linux - 哪个更快? `echo` 一个变量,或者 `tail` 一个长输出文件,或者 `grep` 整个文件

转载 作者:太空狗 更新时间:2023-10-29 11:38:27 25 4
gpt4 key购买 nike

我很好奇在下面的情况下哪个更快。我有大约 2MB 的输出文件和数千行(我们会说在 15k - 50k 之间的任何地方)。

我正在寻找文件末尾(最后 10 行)左右的字符串。我多次执行此操作,有时对一个文件的最后 10 行相同,并且对多个文件执行此操作。

我很好奇下面哪个是最快最有效的:

  1. tail 最后 10 行,将它们保存为变量。当我需要 grep 或检查字符串时,echo 该变量并在输出上 grep
  2. 每次我需要grep 一些东西时,首先tail 输出文件,然后pipegrep 输出
  3. 放弃以上任何一项,每次都grep整个文件。

选项 1)

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

最佳答案

选项 2 使用 tail 两次,因此可能会比选项 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

这将输出文件 in reverse order并且 grep 将在第一场比赛后停止。它还会同时搜索两个搜索词,如果它与第一个词不匹配,您就不必再 grep 两次。

关于linux - 哪个更快? `echo` 一个变量,或者 `tail` 一个长输出文件,或者 `grep` 整个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15950153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com