Проверить количество слов в файле, содержащем конкретную букву

Bash для проверки количества слов в файле, который содержит букву "a"

  • Сохранение параметров `find` в переменной
  • Как использовать awk для печати только строк, содержащих 5 столбцов
  • Разбор JSON для определенных значений
  • «Дополнительные символы после команды» в команде sed a
  • Добавление 2 строк в строфу текстового файла
  • Как разбить огромную строку символов на несколько строк с одинаковым количеством столбцов?
  • Как ksh93 так быстро?
  • добавление столбца в файл CSV с использованием awk
  • В чем разница между kill, pkill и killall
  • Изменение пустой строковой переменной внутри оператора switch в функции bash
  • Ловушка, ERR и повторение строки ошибки
  • Убивать именованный процесс старше X минут? (нет killall -o)
  • 5 Solutions collect form web for “Проверить количество слов в файле, содержащем конкретную букву”

    Предположим, что у нас есть этот тестовый файл:

    $ cat file the cat in the hat the quick brown dog jack splat 

    С реализациями grep , которые приняли расширение GNU -o , мы можем получить все слова, содержащие:

     $ grep -wo '[[:alnum:]]*a[[:alnum:]]*' file cat hat jack splat 

    Мы можем считать эти слова:

     $ grep -wo '[[:alnum:]]*a[[:alnum:]]*' file | wc -l 4 

    POSIXly:

     <file tr -s '[:space:]' '[\n*]' | grep -ca 

    Здесь слова – это последовательности символов без пробелов.

    Вот путь Perl:

      perl -0lnE 'say scalar grep(/a/,split(/\s/,$_));' file 

    И awk образом:

      awk '{for(i=1;i<=NF;i++){if($(i)~/a/){k++}}}END{print k}' file 

    С GNU grep:

      grep -oP '\b\w*a+\w*\b' file 
     awk 'BEGIN{RS="[[:space:][:punct:]]"; c=0} index($0,"a"){c++} END{print c}' 

    Использование версии awk , поддерживающей многосимвольный R ecord S eparator ( RS ), например. GNU awk, вы можете заставить awk читать одно слово на запись.

    Внутри этой записи функция index(in, string) выполняет поиск для первого вхождения string и возвращает позицию символа на основе 1, где она найдена. Если не найден, index() возвращает 0 . Таким образом, возвращаемое значение можно рассматривать как тест булевого условия (0 = false, а не нуль = истина). Обратите внимание: это не поиск регулярного выражения.

    Если совпадение найдено, переменная c увеличивается на 1 ( c++ )

    В блоке BEGIN{} требуется c=0 , поскольку c никогда не увеличивается на инкремент – это приведет к тому, что c будет null а не 0 . Другой способ справиться с этой проблемой – print 0+c (в блоке END{} )

    Linux и Unix - лучшая ОС в мире.