提取指定字符串之前具有非零值的文件的行号

提取指定字符串之前具有非零值的文件的行号

我有一个包含以下数据的文件

1. verification: 10 passed 0 failed
2. verification: 10 passed 0 failed
3. verification: 10 passed 1 failed
4. verification: 10 passed 3 failed
5. verification: 10 passed 0 failed

我想知道3和4的行号。

答案1

假设该文件被称为in.txt,那么:-

awk '$5>0 {print $0; }' in.txt

会给你:-

3. verification: 10 passed 1 failed
4. verification: 10 passed 3 failed

我假设行号 (1-5) 是文件的一部分。如果不是,请将其更改$5$4.

如果行号是文件的一部分并且您只想打印不带点的行号:-

awk '$5>0 {sub(/\./,"",$1); print $1 }' in.txt

这使:-

3
4

答案2

通过GNU grep,您可以使用lookbehind

$ grep -P '(?<!0) failed' file 
3. verification: 10 passed 1 failed
4. verification: 10 passed 3 failed

或者更短的版本awk

$ awk '$5 > 0' file

答案3

请注意,我不是打印实数,而是打印行中直到点的第一个数字。

sed:

 cat inputfile.txt | sed  '/ 0 failed$/d ; s/\..*//'

grep 和 sed:

 cat inputfile.txt | grep -v ' 0 failed$' | sed 's/\..*//'

输出:

3
4

相关内容