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

LinuxBashUnixGrep

Linux Problem Overview


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?

Linux Solutions


Solution 1 - Linux

-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

Solution 2 - Linux

Use -n or --line-number.

Check out man grep for lots more options.

Solution 3 - Linux

use grep -n -i null myfile.txt to output the line number in front of each match.

I dont think grep has a switch to print the count of total lines matched, but you can just pipe grep's output into wc to accomplish that:

grep -n -i null myfile.txt | wc -l

Solution 4 - Linux

Or use awk instead:

awk '/null/ { counter++; printf("%s%s%i\n",$0, " - Line number: ", NR)} END {print "Total null count: " counter}' file

Solution 5 - Linux

grep find the lines and output the line numbers, but does not let you "program" other things. If you want to include arbitrary text and do other "programming", you can use awk,

$ awk '/null/{c++;print $0," - Line number: "NR}END{print "Total null count: "c}' file
example two null,  - Line number: 2
example four null,  - Line number: 4
Total null count: 2

Or only using the shell(bash/ksh)

c=0
while read -r line
do
  case "$line" in
   *null* )  (
    ((c++))
    echo "$line - Line number $c"
    ;;
  esac
done < "file"
echo "total count: $c"

Solution 6 - Linux

or in perl (for completeness...):

perl -npe 'chomp; /null/ and print "$_ - Line number : $.\n" and $i++;$_="";END{print "Total null count : $i\n"}'

Solution 7 - Linux

Refer this link for linux command linux http://linuxcommand.org/man_pages/grep1.html

for displaying line no ,line of code and file use this command in your terminal or cmd, GitBash(Powered by terminal)

grep -irn "YourStringToBeSearch"

Solution 8 - Linux

Just thought I'd something that might help you in the future. To search multiple string and output line numbers and browse thru the output, type:

egrep -ne 'null|three'

will show:

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

egrep -ne 'null|three' | less

will display output in a less session

HTH Jun

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionLondonView Question on Stackoverflow
Solution 1 - LinuxdogbaneView Answer on Stackoverflow
Solution 2 - LinuxAndy LesterView Answer on Stackoverflow
Solution 3 - LinuxjhenningerView Answer on Stackoverflow
Solution 4 - LinuxZsolt BotykaiView Answer on Stackoverflow
Solution 5 - Linuxghostdog74View Answer on Stackoverflow
Solution 6 - LinuxhannesView Answer on Stackoverflow
Solution 7 - LinuxVrushal RautView Answer on Stackoverflow
Solution 8 - LinuxHonest AbeView Answer on Stackoverflow