Home > Enterprise >  I am very new to BASH Scripting, How do I keep a running total (count) of the keyword hits (grep) in
I am very new to BASH Scripting, How do I keep a running total (count) of the keyword hits (grep) in

Time:09-23

count= `grep success <fileName.txt>

The above will only give me a total count of the word "success" but I want to keep a running total. For example, if there is a total of 'expected' 25 hits of which only 20 were found. This would mean that there were 5 failures. So I think I need to keep a running total so in the end I can report (echo) as follows:

20 out of 25 expected success found; 5 failures.

CodePudding user response:

This should suffice:

~$ count=$(grep -o -i <search_term> <data_source> | wc -l)

e.g.

~$ count=$(grep -o -i computer myfile.txt | wc -l)
~$ echo $count

--- flag explanations ---

-o means only print only the matching part of the line. Can also be written as --only-matching.

-i makes the search case-insensitive. Also written as --ignore-case.

-l means *output the number of lines in each datasource/input file. In the above command, that coordinates with grep with the -o flag which counts each match as a unique line found.

CodePudding user response:

You could use awk which will print out the custom output also.

awk '/success/{ success   ; expected=25 } END { if ( success < expected ) ; print success " out of " expected " success found; " fail " failures"};{fail=expected-success}' input_file

Example Output

$ for i in {1..25}; do echo "success";done |\
> awk '/success/{ success   ; expected=25 } END { if ( success < expected ) ; print success " out of " expected " success found; " fail " failures"};{fail=expected-success}'
25 out of 25 success found; 0 failures
  •  Tags:  
  • bash
  • Related