Как я могу использовать оболочку UNIX для подсчета количества раз, когда буква появляется в текстовом файле?


У меня есть несколько текстовых файлов, и я хотел бы подсчитать, сколько раз буква появляется в каждом?

В частности, я хотел бы использовать для этого оболочку UNIX в виде: cat file | .... делай всякое...

Есть ли способ заставить команду wc сделать это?

10 33

10 ответов:

grep char -o filename | wc -l

Другая альтернатива:

tr -d -C X <infile | wc -c

Где X-это символ или строка символов, которые вы хотите подсчитать, а infile-это входной файл.

Альтернатива grep:

sed 's/[^x]//g' filename | tr -d '\012' | wc -c

Где x - символ, который вы хотите посчитать.

Есть еще awk:

$ echo -e "hello world\nbye all" | awk -Fl '{c += NF - 1} END {print c}'
5

Измените -Fl на -F<your character>.

Это работает, устанавливая разделитель поля на символ, указанный -F, а затем накапливая количество полей в каждой строке-1 (потому что если есть один разделитель, есть два поля - но мы должны считать только 1).

awk '{ printf "%s\n", gsub( "ur_char", "oth_char", $0 ) }' < your_file_name > output.txt

Вы можете добавить количество текущих номеров строк, чтобы получить номера строк в awk также.

Echo "a/b/c / d / e/f/g | / awk-F" / "'{print NF} '

Это даст число встречаемости символа " / "

В этом случае я считаю символ "|":

expr `wc -c < filename` \- `tr -d \| < filename | wc -c`

Вы можете попробовать легко: grep -c 'YOUR LETTER' YOUR FILE

Попробуйте с

grep  [PATTERN] -o [FILE] | wc -l

И, пожалуйста, не используйте cat, если это не нужно.

Вот еще один способ

cat  input_file | \
awk 'BEGIN {FS="x"; var=0 } \
{if (NF>0){ var=var + (NF-1) } } \
END{print var}'

Где X-символ или строка символов, которые вы хотите подсчитать, а infile-входной файл