Question

Is there any way under linux/terminal to count, how many times the char f occurs in a plain text file?

Was it helpful?

Solution

How about this:

fgrep -o f <file> | wc -l

Note: Besides much easier to remember/duplicate and customize, this is about three times (sorry, edit! botched the first test) faster than Vereb's answer.

OTHER TIPS

even faster:

tr -cd f < file | wc -c

Time for this command with a file with 4.9 MB and 1100000 occurences of the searched character:

real   0m0.089s
user   0m0.057s
sys    0m0.027s

Time for Vereb answer with echo, cat, tr and bc for the same file:

real   0m0.168s
user   0m0.059s
sys    0m0.115s

Time for Rob Hruska answer with tr, sed and wc for the same file:

real   0m0.465s
user   0m0.411s
sys    0m0.080s

Time for Jefromi answer with fgrep and wc for the same file:

real   0m0.522s
user   0m0.477s
sys    0m0.023s 
echo $(cat <file>  | wc -c) - $(cat <file>  | tr -d 'A' | wc -c) | bc

where the A is the character

Time for this command with a file with 4.9 MB and 1100000 occurences of the searched character:

real   0m0.168s
user   0m0.059s
sys    0m0.115s

If all you need to do is count the number of lines containing your character, this will work:

grep -c 'f' myfile

However, it counts multiple occurrences of 'f' on the same line as a single match.

tr -d '\n' < file | sed 's/A/A\n/g' | wc -l

Replacing the two occurrences of "A" with your character, and "file" with your input file.

  • tr -d '\n' < file: removes newlines
  • sed 's/A/A\n/g: adds a newline after every occurrence of "A"
  • wc -l: counts the number of lines

Example:

$ cat file
abcdefgabcdefgababababbbba


1234gabca

$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l
9
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top