Jon Abraham
Jon Abraham

Reputation: 955

Awk statement generating extra output line; skip blank input lines

jon,doe          5        5      
sam,smith       10        5      

I am required to calculate average for row & column. So basically the inputfile contains name score1 and score2 and i am required to read the contents from a file and then calculate average row-wise and column-wise. I am getting the desired result but there is one extra '0' that i am getting due to white space i would appreciate if someone could help.

awk 'BEGIN {print "name\tScore1\tScore2\tAverage"} {s+=$2} {k+=$3} {print $1,"\t",$2,"\t",$3,"\t",($2+$3)/2} END {print "Average", s/2,k/2}' input.txt

This is the output that i am getting-

name           Score1  Score2   Average
jon,doe          5        5      5
sam,smith       10        5      7.5
                                 0
Average         7.5       5   

Upvotes: 0

Views: 336

Answers (1)

mklement0
mklement0

Reputation: 438008

It looks like you have an extra empty or blank (all-whitespace) line in your input file.

Adding NF==0 {next} as the first pattern-action pair will skip all empty or blank lines and give the desired result.

NF==0 only matches if no fields (data) were found in the input line.
The next statement skips remaining statements for the current input line (record) and continues processing on the next line (record).

awk 'BEGIN {print "name\tScore1\tScore2\tAverage"} NF==0 {next} {s+=$2} {k+=$3} {print $1,"\t",$2,"\t",$3,"\t",($2+$3)/2} END {print "Average", s/2,k/2}' input.txt

Upvotes: 2

Related Questions