London
London

Reputation: 15284

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?

Upvotes: 444

Views: 438098

Answers (8)

Honest Abe
Honest Abe

Reputation: 79

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

Upvotes: 1

Vrushal Raut
Vrushal Raut

Reputation: 1228

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"

Upvotes: 3

dogbane
dogbane

Reputation: 274838

-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

Upvotes: 691

Zsolt Botykai
Zsolt Botykai

Reputation: 51693

Or use awk instead:

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

Upvotes: 7

hannes
hannes

Reputation: 964

or in perl (for completeness...):

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

Upvotes: 3

ghostdog74
ghostdog74

Reputation: 343057

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"

Upvotes: 4

jhenninger
jhenninger

Reputation: 707

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

Upvotes: 8

Andy Lester
Andy Lester

Reputation: 93805

Use -n or --line-number.

Check out man grep for lots more options.

Upvotes: 67

Related Questions