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

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

  • Как получить использование процессора для каждого ядра с помощью сценария bash с использованием стандартных инструментов * nix
  • Сценарий оболочки для захвата одного или нескольких видео Wistia
  • nemo: Контекстное меню Действие Запуск сценария, который заставляет выбранную символическую ссылку быть относительной
  • Определите размер резервной копии за 7 дней
  • Bash при поиске цикла и замене с помощью sed
  • Как я могу отображать 3 строки текста за один раз на 1 строку?
  • Как проверить неизвестные команды в сценарии оболочки?
  • Печать строк между двумя шаблонами, соответствующими условию в awk
  • 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 - лучшая ОС в мире.