Intereting Posts
Arch Linux Server: как открутить HDD в конфигурации BTRFS Raid5? Выбор несуществующих файлов с подстановочным знаком / регулярным выражением В чем разница между использованием переменных оболочки и переменных среды? Какой минимальный минимум я должен установить на безголовую коробку Red Hat (или CentOS) или Ubuntu, чтобы запускать программы GUI через X11 через SSH Как получить DisplayID для монитора? Вывод из цикла while с корпусом переключателя внутри Как заставить SSH `ControlPath` различать IPv4 и IPv6? Каковы общепринятые названия различных соглашений об именах для дисков и разделов? Как выполнить трассировку стека с помощью grep и regex? Могу ли я получить номер N-й строки стандартного вывода? Можем ли мы сделать grep быстрее, индексируя слова в файлах? netcat пропускная способность низкая, но iperf высокий bash не выходит из аномального выхода дочернего процесса из-за сигнала всегда подключаемое VPN-соединение, которое не протекает? Как заменить несколько пустых строк на определенную непустую строку?

Как подсчитать количество слов и напечатать строки, соответствующие точному шаблону?

Я хочу подсчитать количество слов и напечатать соответствующие строки шаблонов, которые соответствуют точно следующему шаблону:

abc-ERROR:

Входной файл содержит:

 # abc-ERROR: xyxxkkfgfr # def-Error: aaaaaa # abc-ERROR.cpp 

Выход должен быть:

  1 (count) # abc-ERROR: xyxxkkfgfr (line) 

Вы можете использовать grep для получения строк и grep -c чтобы получить количество строк. Если вам не нравится запускать grep два раза, вы можете использовать tee и подстановку процесса (следующий синтаксис bash):

 grep abc-ERROR: input.txt | tee >( wc -l ) 

Как это:

 $ cat file # abc-ERROR: xyxxkkfgfr # abc-ERROR: xyxxkkfgfr # abc-ERROR: xyxxkkfgfr # def-Error: aaaaaa # abc-ERROR.cp # abc-ERROR: asdgsdgaaf # abc-ERROR: asdgsdgaaf # abc-ERROR: tttttttttq $ awk '/abc-ERROR: /{a[$0]++}END{for(k in a) printf "%d\t(count)\n%s\t(line)\n",a[k],k}' file 1 (count) # abc-ERROR: tttttttttq (line) 2 (count) # abc-ERROR: asdgsdgaaf (line) 3 (count) # abc-ERROR: xyxxkkfgfr (line) 

Есть два способа, которые я рекомендую по этому поводу.

1) Поместите функцию в свой файл bashrc / bash_profile и создайте псевдоним для вызова этой функции (это сделает глобальное использование этого)

2) создать файл сценария оболочки и также создать псевдоним этого файла.

 #!/bin/bash function matchString(){ REGEX="$1" FILE="$2" RESULTS=$(grep -n "$REGEX" $FILE | awk -F ":" '{print $2 "\tLine: " $1}') COUNT=$(echo $RESULTS | wc -l) echo "Count: $COUNT" echo $RESULTS } matchString $1 $2 

Вызов этого файла (например, bash matchString.sh "abc-ERROR:" test.txt) на основе вашего текстового файла будет выводиться следующим образом:

Количество: 1

строка abc-ERROR: 1

– Эта функция принимает 1-й аргумент как шаблон регулярного выражения (поэтому его можно повторно использовать в любом подобном сценарии) и ищет этот шаблон в файле, который вызывается 2-м аргументом.

1-я строка вывода – это общее количество всех согласованных строк, и каждая строка после этого совпадает с табуляцией номера строки этого совпадения.