需要使用shell打印访问日志中超过200个状态代码的行

需要使用shell打印访问日志中超过200个状态代码的行,shell,Shell,我需要打印这些行,谁的状态码在访问日志的200以上 我的剧本: #!/bin/bash status=200 while read op ; do fun=$(echo $op | sudo tail /var/log/nginx/access.log | awk '{ print $9}') ; if [[ $fun -ge $status ]]; then echo " $(fun) " > /tmp/access.txt fi done 但是,我仍然没有得到结果。我不知道您是否总能

我需要打印这些行,谁的状态码在访问日志的200以上

我的剧本:

#!/bin/bash
status=200
while read op ;
do
fun=$(echo $op | sudo tail /var/log/nginx/access.log | awk '{ print $9}') ;
if [[ $fun -ge $status ]];
then
echo " $(fun) " > /tmp/access.txt
fi
done

但是,我仍然没有得到结果。

我不知道您是否总能期望状态在第9列中,但您可能只想执行以下操作:

sudo awk '$9 > status' status=200 /var/log/nginx/access.log > /tmp/access.txt
也就是说,你的整个脚本应该是那一行。根本不需要while循环

您的标题表示“高于200”,但您在脚本中使用了
-ge
,因此您可能需要:

sudo awk '$9 >= status' status=200 /var/log/nginx/access.log > /tmp/access.txt

循环的输入是什么样子的?为什么要使用循环?不确定如何处理循环迭代,但每次迭代都会覆盖/tmp/access.txt的输出。您可能想用>>替换>,假设状态始终在第9列,您可能只是在查找
awk'$9>200'/var/log/nginx/access.log
注意
$(fun)
尝试将
fun
作为命令运行,并被该命令的输出(不太可能存在)替代。可能不是有意的。