How can I use the UNIX shell to count the number of times a letter appears in a text file?

感情迁移 提交于 2019-12-20 10:17:06

问题


I have a few text files and I'd like to count how many times a letter appears in each?

Specifically, I'd like to use the UNIX shell to do this, in the form of: cat file | .... do stuff...

Is there a way I can get the wc command to do this?


回答1:


grep char -o filename | wc -l



回答2:


Another alternative:

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

where X is the character or string of characters you want to count and infile is the input file.




回答3:


Alternative to grep:

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

where x is the character you want to count.




回答4:


There's also awk:

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

Change -Fl to -F<your character>.

This works by setting the field delimiter to the character specified by -F, then accumulating the number of fields on each line - 1 (because if there's one delimiter, there are two fields - but we should only count 1).




回答5:


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

you can add count of current line number to get the line numbers in awk also.




回答6:


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

this will give the number of occurrence of character "/"




回答7:


In this case, i'am counting the character "|":

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



回答8:


You can try easily: grep -c 'YOUR LETTER' YOUR FILE




回答9:


try it with

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

and please do not use cat if not needed.




回答10:


Here is another way

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

where X is the character or string of characters you want to count and infile is the input file



来源:https://stackoverflow.com/questions/1368563/how-can-i-use-the-unix-shell-to-count-the-number-of-times-a-letter-appears-in-a

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!