London London - 3 months ago 12
Linux Question

How can I format my grep output to show line numbers at the end of the line, and also the hit count?

I'm using grep to match string in a file. Here is an example file:

example one,
example two null,
example three,
example four null,


grep -i null myfile.txt
returns

example two null,
example four null,


How can I return matched lines together with their line numbers like this:

example two null, - Line number : 2
example four null, - Line number : 4
Total null count : 2


I know -c returns total matched lines, but I don't how to format it properly to add
total null count
in front, and I don't know how to add the line numbers.

What can I do?

Answer

-n returns line number.

-i is for ignore-case. Only to be used if case matching is not necessary

$ grep -in null myfile.txt

2:example two null,
4:example four null,

Combine with awk to print out the line number after the match:

$ grep -in null myfile.txt | awk -F: '{print $2" - Line number : "$1}'

example two null, - Line number : 2
example four null, - Line number : 4

Use command substitution to print out the total null count:

$ echo "Total null count :" $(grep -ic null myfile.txt)

Total null count : 2