Bash 如何使用';查找日志文件的名称;错误';在最后一行?
我正在尝试查找以错误结尾的作业的id 当我使用Bash 如何使用';查找日志文件的名称;错误';在最后一行?,bash,grep,Bash,Grep,我正在尝试查找以错误结尾的作业的id 当我使用 for i in *log do tail -n 1 $i | grep error echo $i done 它似乎会在每个文件的最后一行找到错误,即使是最后一行没有错误的文件,也会返回所有包含错误的文件名 STOP fatal_error out1.log STOP fatal_error out2.log STOP fatal_error out3.log .... 即使 grep error out1.log 一无所获 或者,是否有
for i in *log
do tail -n 1 $i | grep error
echo $i
done
它似乎会在每个文件的最后一行找到错误,即使是最后一行没有错误的文件,也会返回所有包含错误的文件名
STOP fatal_error
out1.log
STOP fatal_error
out2.log
STOP fatal_error
out3.log
....
即使
grep error out1.log
一无所获
或者,是否有一种更简单的方法来获取以错误结尾的作业列表?我使用qsub标记,因为我使用qsub提交作业您的逻辑不正确。
echo$i将获得文件列表,而不是grep输出。您的逻辑不正确。
echo$i将获得文件列表,而不是您想要说的grep输出
do tail -n 1 $i | grep error
不是
否则,您将在每次迭代中检查每个日志文件,并将始终得到相同的结果。您想说什么
do tail -n 1 $i | grep error
不是
否则,您将在每次迭代中检查每个日志文件,并将始终得到相同的结果。您需要一条if语句,以便仅在grep成功时回显文件名:
for i in *.log
do
if tail -n 1 $i | grep error > /dev/null
then
echo $i
fi
done
另外,将
grep
结果重定向到/dev/null
,这样它就不会出现在输出中。您需要一个if语句,这样只有在grep成功时才能回显文件名:
for i in *.log
do
if tail -n 1 $i | grep error > /dev/null
then
echo $i
fi
done
另外,将
grep
结果重定向到/dev/null
,这样它就不会出现在输出中。不严格要求使用if语句。考虑:用于*.log中的i;dotail-n1“$i”| grep-q错误和echo$i;完成
if语句不是严格要求的。考虑:用于*.log中的i;dotail-n1“$i”| grep-q错误和echo$i;完成
请不要删除您的问题并重复答案。这不是这个网站的工作方式。我已经把你的问题退回到以前的状态。没有必要更改它,因为每个人都可以清楚地看到下面已接受的答案。请不要删除您的问题并重复答案。这不是这个网站的工作方式。我已经把你的问题退回到以前的状态。没有必要改变它,因为每个人都可以清楚地看到下面被接受的答案。