Чтобы найти количество вхождений слова, взятого в качестве ввода из командной строки в Unix - PullRequest
0 голосов
/ 03 марта 2019

Для файла file1.txt, который содержит

Apple fruit Apple tree
Tree AApple AApklle Apple apple
TREE
Apple

Я хочу найти количество вхождений слова Apple.Вывод должен быть 4.
Мой файл script.sh содержит

#!/bin/bash
FILE="$1"
TOFIND="$2"
if [ -f "$FILE" ];
then
grep -o '\<"$TOFIND"\>' "$FILE" | wc -l
fi

Когда я пытаюсь использовать

bash script.sh file1.txt Apple

Вывод показывает 0.Пожалуйста, помогите решить эту проблему.

Ответы [ 3 ]

0 голосов
/ 03 марта 2019

Один в awk:

$ awk -v w="Apple" 'BEGIN{RS="( |\n)+"}{c+=($1==w)}END{print c}' file
4

Объяснено:

$ awk -v w="Apple" '     # search word as parameter
BEGIN {
    RS="( |\n)+"         # set record separator to separate words
    # RS="[[:space:]]+"  # where available
}{
    c+=($1==w)           # count searched words
}
END {                    # in the end
   print c+0             # output count
}' file

RS="( |\n)+" протестировано для работы на gawk, mawk и Busybox awk, не работает на оригинальном Debian-AWK.RS="[[:space:]]+" проверено на работу только на gawk.

0 голосов
/ 03 марта 2019

С GNU awk для нескольких символов RS:

$ awk -v RS='\\<Apple\\>' 'END{print (NR ? NR-1 : 0)}' file
4

или с переменной оболочки:

$ tofind='Apple'
$ awk -v RS='\\<'"$tofind"'\\>' 'END{print (NR ? NR-1 : 0)}' file
4
0 голосов
/ 03 марта 2019

Вы можете изменить строку grep на:

grep -o '\<'"$TOFIND"'\>' "$FILE" | wc -l

или просто:

grep -o "\<$TOFIND\>" "$FILE" | wc -l

Тогда это будет работать.Это потому, что кавычки, ваши двойные кавычки были заключены в одинарные кавычки, поэтому они не раскрываются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...