Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何使用';查找日志文件的名称;错误';在最后一行?_Bash_Grep - Fatal编程技术网

Bash 如何使用';查找日志文件的名称;错误';在最后一行?

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 一无所获 或者,是否有

我正在尝试查找以错误结尾的作业的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 
一无所获

或者,是否有一种更简单的方法来获取以错误结尾的作业列表?我使用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;完成
请不要删除您的问题并重复答案。这不是这个网站的工作方式。我已经把你的问题退回到以前的状态。没有必要更改它,因为每个人都可以清楚地看到下面已接受的答案。请不要删除您的问题并重复答案。这不是这个网站的工作方式。我已经把你的问题退回到以前的状态。没有必要改变它,因为每个人都可以清楚地看到下面被接受的答案。