Extraiga el número de línea de un archivo que tiene un valor distinto de cero antes de una cadena especificada

Extraiga el número de línea de un archivo que tiene un valor distinto de cero antes de una cadena especificada

Tengo un archivo que contiene los siguientes datos.

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

Quiero saber los números de línea de 3 y 4.

Respuesta1

Suponiendo que el archivo se llame in.txt, entonces: -

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

Te regalaré:-

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

Supuse que los números de línea (1-5) son parte del archivo. Si no es así, cambie $5a $4.

Si el número de línea es parte del archivo y desea imprimirlo sin el punto:-

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

lo que da:-

3
4

Respuesta2

Con GNU grep, puedes usar lookbehind:

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

O una versión más corta de awk:

$ awk '$5 > 0' file

Respuesta3

Tenga en cuenta que no estoy imprimiendo números reales, sino el primer número de la línea hasta el punto.

Consed:

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

Congrep y sed:

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

Producción:

3
4

información relacionada