我有一个文件,内容如下:
label1 name
1
label2 id
2
label3 id
0
我正在使用 grep 扫描行,如果与模式"标签"不匹配的行的值大于 0,则会导致失败
if (grep -v -l "label" fileA) > 0
then
echo -e "failure"
else
echo -e "success"
fi
我还想打印那些对应于失败的值(即>0(
label1 name
label2 id
我在下面尝试过,但没有给出任何结果。我不确定,我到底哪里做错了
ps -ef | grep -v -l "label" fileA > 0
我是Unix的新手,并试图弄清楚如何打印故障线。
请帮忙
试试这个 -
$ cat f
label1 name
1
label2 id
2
label3 id
0
$ awk '/label/ {k=$0;getline tmp;print k,tmp}' f
label1 name 1
label2 id 2
label3 id 0
您可以根据需要过滤值,如下所示 -
$ awk '/label/ {k=$0;getline tmp;if(tmp > 0) {print k,tmp}}' f
label1 name 1
label2 id 2
编辑1:如果你的文件有一些没有价值的标签 -
$ cat f
label1 name
1
label2 id
2
label3 id
0
label4 id
label5 id
10
$ awk '/label/ {k=$0;getline tmp;if(tmp > 0) {print k,tmp}}' f
label1 name 1
label2 id 2
label5 id 10
通常,如果找到选定的行,则 grep
的退出状态为 0,否则为 1。我想你正在寻找grep -c
:
$ grep -c "label" f
3
$ echo $?
0
所以你可以做一些类似的事情
if [ $(grep -c "label" f) -gt 0 ]; then
echo match found
fi
或
grep -c "label" f
if [ $? -eq 0 ]; then
echo match found
fi
您还希望打印找到的行。您可以将这些存储在变量中。
foundlabels=$(grep "label" f)
echo "You can test on $? here, but now you have another way."
if [ -n "${foundlabels}" ]; then
echo "failure"
echo "${foundlabels}"
else
echo "success"
fi