我有一个简单的 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