Ответ 1
grep char -o filename | wc -l
У меня есть несколько текстовых файлов, и я хотел бы подсчитать, сколько раз появляется буква в каждом из них?
В частности, я хотел бы использовать оболочку UNIX для этого в виде: cat file |.... делать вещи...
Есть ли способ заставить команду wc сделать это?
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}'
это даст номер появления символа "/"
В этом случае i'am подсчитывает символ "|":
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 - это входной файл