
У меня есть файл, содержащий следующие данные
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
Обратите внимание, что я не печатаю реальные числа, а первое число в строке до точки.
Ссед:
cat inputfile.txt | sed '/ 0 failed$/d ; s/\..*//'
Сgrep и sed:
cat inputfile.txt | grep -v ' 0 failed$' | sed 's/\..*//'
Выход:
3
4