比较参数和文件文本(if 子句)

比较参数和文件文本(if 子句)

我有一个简单的 txt 文件,其中包含一些信息,如下所示:

"John;23124;Firefighter;[email protected]"
"Hannah;34241;Hairdresser;[email protected]"

我想要做的是用给定参数之间的比较来表示 if 语句,并检查这些参数是否等于文件文本中的任何行。例如(“约翰”23124“消防员”“[电子邮件受保护]") 是我给出的参数,它们与文件中的第一行匹配。

我尝试过if[(cat filename.txt | grep $2 | wc -l) - gt 0],但似乎不起作用。

答案1

可以用 来完成awk
如果您的文件由 分隔;,则必须添加-F ';'参数。

cat yourfile | awk -F ';' '{print ($2>30000)? "foo" : "bar"}'

打印bar第一行(参数太低)
foo第二行。

如果你只想检查是否$2存在,你可以这样做:

cat yourfile | awk -F ';' '{print $2? "foo" : "bar"}'

如果您想知道有多少行具有特定模式:

cat yourfile | awk -F ';' '{printf("%s", $2? "foo\n" : "")}' | wc -l

然后您可以在以下条件下使用它:

[ $(cat yourfile | awk -F ';' '{printf("%s", $2? "foo\n" : "")}' | wc -l) -gt 2 ] \
&& echo "at least 2 matches" \
|| echo "less than 2 matches"

或者如果您更喜欢if声明:

if [ $(cat yourfile | awk -F ';' '{printf("%s", $2? "foo\n" : "")}' | wc -l) -gt 2 ];
then
    echo "at least 2 matches"
else
    echo "less than 2 matches";
fi

相关内容