foobarfuzzbizz
foobarfuzzbizz

Reputation: 58637

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

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?

Upvotes: 40

Views: 79140

Answers (10)

Alfredo Mari
Alfredo Mari

Reputation: 31

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

Upvotes: 1

Vinicius
Vinicius

Reputation: 11

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

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

Upvotes: 1

aravinda
aravinda

Reputation: 19

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

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

Upvotes: 1

dantesan
dantesan

Reputation: 11

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.

Upvotes: 1

user1011046
user1011046

Reputation: 204

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

Upvotes: 0

Scott Lindsay
Scott Lindsay

Reputation: 1303

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.

Upvotes: 13

Oliver Friedrich
Oliver Friedrich

Reputation: 9240

try it with

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

and please do not use cat if not needed.

Upvotes: 0

Mark Rushakoff
Mark Rushakoff

Reputation: 258188

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).

Upvotes: 1

hlovdal
hlovdal

Reputation: 28180

Alternative to grep:

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

where x is the character you want to count.

Upvotes: 1

SilentGhost
SilentGhost

Reputation: 319601

grep char -o filename | wc -l

Upvotes: 47

Related Questions