簡體   English   中英

Gawk打印每列的最大值

[英]Gawk print largest value from each column

我正在編寫一個awk腳本,它在文本文件中輸入一些輸入列,並打印出每列中的最大值

輸入:

 $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

輸出:

80  1134.7  107.2       70

腳本:

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
}

當前輸出:

 60 30  45.O    66.1

我做錯了第一個awk腳本

======= ======解決方案

 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
 }

謝謝您的幫助

由於您有四列,因此您至少需要四個變量,每列一個變量(如果您願意,還需要一個數組)。 而且你不需要完整地保留任何一條線。 獨立處理每個列。

您需要根據您的目的調整以下內容,以便在特定列中找到最大值(在本例中為第二列)。

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

您使用2美元> 3美元的方法似乎是將兩列相互比較。

您可以創建一個用戶定義的函數,然后將單個列數組傳遞給它以檢索最大值。 像這樣的東西 -

[jaypal:~/Temp] 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.0 70
80 75 107.2 55.6

[jaypal:~/Temp] awk '             
function max(x){i=0;for(val in x){if(i<=x[val]){i=x[val];}}return i;} 
{a[$1]=$1;b[$2]=$2;c[$3]=$3;d[$4]=$4;next} 
END{col1=max(a);col2=max(b);col3=max(c);col4=max(d);print col1,col2,col3,col4}' numbers
80 1134.7 107.2 70

要么

awk 'a<$1{a=$1}b<$2{b=$2}c<$3{c=$3}d<$4{d=$4} END{print a,b,c,d}' numbers

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM