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

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

abc-ERROR:

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

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

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

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

3 Solutions collect form web for “Как подсчитать количество слов и напечатать строки, соответствующие точному шаблону?”

Вы можете использовать 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-я строка вывода – это общее количество всех согласованных строк, и каждая строка после этого совпадает с табуляцией номера строки этого совпадения.

  • Возвращает количество совпадений с помощью find / replace с помощью sed
  • Как добавить нуль (0) в пробелы в большом файле (пример файла ниже)
  • Как изменить содержимое файла в Linux?
  • Добавление макроса TeX в начало файла с помощью sed (почему мой метод не работает?)
  • Печать отступов с пробелом только в команде дерева
  • Перемещение согласованной строки над другой совпадающей строкой с помощью sed
  • sed для удаления ведущего 91, если число равно 12 цифрам
  • Рекурсивный поиск / замена, учет глубины каталога
  • Замените произвольные символы в середине строки IP-адреса с помощью sed
  • обмен двумя словами с помощью sed
  • Команда sed не возвращает то, что я хочу
  • Linux и Unix - лучшая ОС в мире.