Ala*_*lan 5 unix linux shell scripting
我试图使用Shell Scripting逐行读取文本文件.我一直在做的是
while read line
do
var1=$(grep -s "Completed" $line)
var2=$(grep -s "Script Finished" $line)
if[ "$var1" = "$line" ]
break
else
if[ "$var2" = "$line" ]
count='expr $count + 1'
else
countinue
fi
fi
done < file.txt
Run Code Online (Sandbox Code Playgroud)
如果您有任何建议,请让我知道!我对其他选择持开放态度,因为我一直试图这么做.
澄清:
我逐行浏览一个文件(while循环)然后我在grepping那一行,看看"Completed"是否是一个子字符串,并查看"Script Finished"是否是一个子字符串(Grep将变量设置为整行).那么当我检查变量是否已完成时我想要打破while循环,如果不检查"Script Finished"是否是一个子串,那么我可以递增一个计数器(我试图计算在完成之前完成的脚本数量)完成").
关于:
当我做var1 = $(grep -s"已完成"$ line)为什么它会找到所有已完成的实例...我想如果我逐行浏览它只会找到该特定行中的实例.
编辑:
我用下面的awk答案.我所要做的就是删除{next}语句,它完美无缺.
谢谢
你有几个错误。另外,您可能需要考虑一个用于执行此类操作的工具。awk 就是其中之一。
awk '/blah blah/ {exit}
/Finished/ {count+=1}
{next}
END{ print count} ' filename
Run Code Online (Sandbox Code Playgroud)
当第一行与该行任何地方的“blah blah”匹配时,第一行退出。
第二行计算“已完成”匹配的数量。
{next} 位用于继续读取而不是打印每一行 - 这在 awk 的某些版本中会发生。
最后一行 END {} 函数在代码完成文件时运行。它显示计数值。
我选择了 awk 方法,而不是尝试修复 shell 脚本中的逻辑和语法错误。如果您需要这种帮助,请考虑在命令行上单独运行几乎每个代码块(或行)。我假设你使用的是 bash。
错误示例
-eq to compare strings, use =, example: [ "$var" = "something" ]
$(var1) should be either "${var1}" or "$var1" lines 4 and 8
Run Code Online (Sandbox Code Playgroud)
grep 返回一整行,您是否正在测试“blah blah”并期望只是“blah blah”作为整个结果?
| 归档时间: |
|
| 查看次数: |
6207 次 |
| 最近记录: |