【问题标题】:Read each lines from an input file and print desired matched patterns从输入文件中读取每一行并打印所需的匹配模式
【发布时间】:2016-11-05 11:10:45
【问题描述】:

我在命令的 input.txt 文件中捕获了以下详细信息。我的要求是匹配任何行中的模式“停止|中止|没有运行”,需要打印 那条线。如果所有都处于“正在运行”状态,则需要打印一条消息“所有正在运行”。

输入.txt:

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

如果行中有任何匹配的模式“已停止|中止|未运行”,我想要的输出将是这样的。

SVRSVC5 SVRSVC5 NAME    SVRSVC5 PID     isn't running
SVRSVC8 SVRSVC8 NAME    SVRSVC8 PID     Aborted
SVRSVC12 SVRSVC12 NAME  SVRSVC12 PID    Stopped

如果行中没有匹配的模式并且全部都是“正在运行”,则打印“ALL ARE RUNNING”

提前致谢,

【问题讨论】:

  • 你为什么不用grep

标签: shell if-statement awk while-loop case


【解决方案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

试试这个。它对我有用。

【讨论】:

  • 这看起来像是显式放置一个变量“tag=1”并假设所有人都在运行它打印消息“ALL ARE RUNNING”
  • 我们可以在这种情况下使用“case”语句吗?任何想法或解决方案将不胜感激。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多