Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Gawk print largest value from each column

Tags:

linux

awk

gawk

I am writing a awk script that takes some columns of input in a text file and print out the largest value in each column

Input:

 $cat numbers
    10      20      30.3    40.5
    20      30      45.7    66.1
    40      75      107.2   55.6
    50      20      30.3    40.5
    60      30      45.O    66.1
    70      1134.7  50      70
    80      75      107.2   55.6

Output:

80  1134.7  107.2       70

Script:

BEGIN {
val=0;
line=1;
}
{
if( $2 > $3 )
{
   if( $2 > val )
   {
      val=$2;
      line=$0;
   }
}
else
{
   if( $3 > val )
   {
      val=$3;
      line=$0;
   }
}
}
END{
print line
}

Current output:

 60 30  45.O    66.1

What am I doing wrong first awk script

=======SOLUTION======

 END {
  for (i = 0; ++i <= NF;)
   printf "%s", (m[i] (i < NF ? FS : RS))
   }
 {
 for (i = 0; ++i <= NF;)
   $i > m[i] && m[i] = $i
 }

Thanks for the help

like image 539
BillPull Avatar asked Jul 15 '26 09:07

BillPull


2 Answers

Since you have four columns, you'll need at least four variables, one for each column (or an array if you prefer). And you won't need to hold any line in its entirety. Treat each column independently.

like image 51
Kevin Avatar answered Jul 20 '26 09:07

Kevin


You need to adapt something like the following for your purposes which will find the maximum in a particular column (the second in this case).

awk 'BEGIN {max = 0} {if ($2>max) max=$2} END {print max}' numbers.dat

The approach you are taking with $2 > $3 seems to be comparing two columns with each other.

like image 43
Omar Avatar answered Jul 20 '26 10:07

Omar