Reputation: 58637
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
Reputation: 11
In this case, i'am counting the character "|":
expr `wc -c < filename` \- `tr -d \| < filename | wc -c`
Upvotes: 1
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
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
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
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
Reputation: 9240
try it with
grep [PATTERN] -o [FILE] | wc -l
and please do not use cat if not needed.
Upvotes: 0
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
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