Shell 从输入文件中读取每一行并打印所需的匹配图案
我在一个命令的input.txt文件中捕获了以下详细信息。我的要求是匹配任何行中的“停止|中止|未运行”模式,需要打印 那条线。如果all处于“运行”状态,则需要打印一条“all正在运行”的消息 input.txt:Shell 从输入文件中读取每一行并打印所需的匹配图案,shell,if-statement,awk,while-loop,case,Shell,If Statement,Awk,While Loop,Case,我在一个命令的input.txt文件中捕获了以下详细信息。我的要求是匹配任何行中的“停止|中止|未运行”模式,需要打印 那条线。如果all处于“运行”状态,则需要打印一条“all正在运行”的消息 input.txt: SVRSVC1 SVRSVC1 NAME SVRSVC1 PID Running SVRSVC2 SVRSVC2 NAME SVRSVC2 PID Running SVRSVC3 SVRSVC3 NAME SVRSVC3 PID Runni
SVRSVC1 SVRSVC1 NAME SVRSVC1 PID Running
SVRSVC2 SVRSVC2 NAME SVRSVC2 PID Running
SVRSVC3 SVRSVC3 NAME SVRSVC3 PID Running
SVRSVC4 SVRSVC4 NAME SVRSVC4 PID Running
SVRSVC5 SVRSVC5 NAME SVRSVC5 PID isn't running
SVRSVC6 SVRSVC6 NAME SVRSVC6 PID Running
SVRSVC7 SVRSVC7 NAME SVRSVC7 PID Running
SVRSVC8 SVRSVC8 NAME SVRSVC8 PID Aborted
SVRSVC9 SVRSVC9 NAME SVRSVC9 PID Running
SVRSVC10 SVRSVC10 NAME SVRSVC10 PID Running
SVRSVC11 SVRSVC11 NAME SVRSVC11 PID Running
SVRSVC12 SVRSVC12 NAME SVRSVC12 PID Stopped
SVRSVC13 SVRSVC13 NAME SVRSVC13 PID Running
SVRSVC14 SVRSVC14 NAME SVRSVC14 PID Running
我编写了以下代码,但想知道这是否是一种正确的方法?请帮忙
#set -x
RUNTIME=`date +%Y%m%d_%H%M%S`
TOTAL_RUNSTAT=$(more input.txt | wc -l)
while read -r line; do
if [[ $line =~ Stopped|Aborted|"isn't running" ]]; then
echo $line;
elif [[ $line =~ Running ]]; then
echo $line >> runstatuslog_$RUNTIME;
if [[ `more runstatuslog_$RUNTIME | wc -l` =~ $TOTAL_RUNSTAT ]]; then
echo "ALL SERVICES RUNNING";
fi
fi
done < input.txt
如果行中没有匹配的图案&所有行都在“运行”,则打印“所有行都在运行”
提前感谢,tag=1
tag=1
while read -r line; do
if [[ $line =~ Stopped|Aborted|"isn't running" ]]; then
echo $line
tag=0
fi
done < input.txt
if [ $tag -eq 1 ]
then
echo "ALL ARE RUNNING"
fi
而read-r行;做
如果[$line=~停止|中止|“未运行”];然后
回音$线
标记=0
fi
完成
试试这个。这对我有用 tag=1
而read-r行;做
如果[$line=~停止|中止|“未运行”];然后
回音$线
标记=0
fi
完成
试试这个。这对我有用 为什么不使用
grep
?为什么不使用grep
?这看起来像是显式地放置了一个变量“tag=1”,并假设所有人都在运行它打印消息“all is running”在这种情况下我们可以使用“case”语句吗,任何想法或解决方案都将受到高度赞赏。这看起来像是明确地放置一个变量“tag=1”,并假设所有人都在运行它打印消息“所有人都在运行”,我们可以使用“case”语句吗?在这种情况下,任何想法或解决方案都将受到高度赞赏。
tag=1
while read -r line; do
if [[ $line =~ Stopped|Aborted|"isn't running" ]]; then
echo $line
tag=0
fi
done < input.txt
if [ $tag -eq 1 ]
then
echo "ALL ARE RUNNING"
fi