在下面的文件中,我会发现所有带有“PRIO”的行在此之后是否有任何值,如果有一些值丢失,我想把它写成输出。
我尝试用grep做到这一点,但只有在有一次出现单词时才会匹配。
cat PATH_TO_FILE | grep 'PRIO' &> /dev/null
if [ $? == 0 ]; then
echo "matched"
else
echo "not found"
fi
文件结构看起来与下面的这个相似
name1
sdgk
PRIO 3
name2
PRIO
dsl dfhhhdf
name3
fnslkf hsdhfd
jlkg;jslk sgdgdsg
kfasdjmgkdlsgl sdggsehg
PRIO 1
name4
sdgds
dsdsgdg
PRIO 2
sdgg
答案 0 :(得分:0)
不确定要测试的是什么,但是
$ grep -q 'PRIO\s*$' file
检查之后是否有任何PRIO没有任何值。对于您的示例输入,这将成功,您可以将其用作错误条件。
if grep -q 'PRIO\s*$' file
then echo "found missing value instance"
else echo "all instances have values"
fi
答案 1 :(得分:0)
使用awk,通过检查字段数量可以非常简单。
awk '/PRIO/{ str=(NF>1)?"matched":"not found"; print str }' <file>
这样做:
/PRIO/
:如果一行包含单词PRIO
,请执行操作{...}
{...}
:如果字段数大于1`(NF> 1)1,则匹配,否则不匹配。如果您想确保PRIO
是第一个单词,请使用$1=="PRIO"
,如果您想打印行号,请使用
awk '($1=="PRIO"){ str=(NF>1)?"matched":"not found"; print NR,str }' <file>