Подсчитать строки с целыми числами в них, используя bash и w c -l - PullRequest
1 голос
/ 15 февраля 2020

Утилита на моей машине Linux выводит журнал в 'stdout'. В каждой строке есть либо строка, либо целое число, оно выглядит следующим образом:

[ERROR] resource busy, retrying
0989282882
[DEBUG] starting process with pid 4028
7918361566
1037491392
[DEBUG] starting process with pid 4056
2873187983
7853738301
1290312037
[DEBUG] done with init
1872989829
[DEBUG] cleaning up
8917982882

(на самом деле это намного длиннее)

Я хочу сосчитать строки, которые имеют целые числа в них.

Я уже использовал: program | grep DEBUG | wc -l, чтобы получить счетчик отладки (то же самое для ERROR)

Но как я могу подсчитать целые числа? У них нет ничего стоящего c как струны, которые я мог бы понять ...

Ответы [ 4 ]

2 голосов
/ 15 февраля 2020

Вы можете использовать grep после указания регулярного выражения для определения целых чисел.

В этом конкретном случае grep -E "^[0-9]+" | wc -l должно работать.

Здесь

^ означает начало строки

[0-9] означает любое число от 0 до 9

+ означает одну или несколько таких цифр

1 голос
/ 15 февраля 2020

Для этого вам не нужно w c, у grep есть -c

program |  grep -c -E -x '[[:digit:]]+'
  • -c печать только количества выбранных строк
  • -E расширенное регулярное выражение (вы можете опустить его и использовать шаблон [0-9]\+)
  • -x соответствовать всей строке, а не только ее части

См. Руководство по POSIX grep

В качестве альтернативы, поскольку вы упомянули также [DEBUG], вы можете использовать awk для одного прохода (особенно, если ваш program не идемпотент )

program | awk  '/^[0-9]+$/ { numbers++ } /^\[DEBUG\]/ {debugs++} END { print numbers,debugs }'

См. Руководство по POSIX awk

0 голосов
/ 15 февраля 2020
program | grep '^[0-9].*$' | wc -l
0 голосов
/ 15 февраля 2020

Я бы сделал это program | grep -E "^[0-9]+" | wc -l. Это будет соответствовать линиям, которые начинаются с 1 или более цифр. Кажется, достаточно для вашего варианта использования.

...