Shell-Script

在我的給定數據中找到最大的正數?

  • February 24, 2019

有人可以告訴我一種使用 awk、sed 或某種 unix shell 程序找到最大正數的方法嗎?我正在使用帶有 KSH 的 Linux RHEL。輸入可能有 8 列數據,其中 N/A 作為可能值之一。

SAMPLE INPUT

1252.2          1251.8          N/A             N/A 
-31.9           -33.2           N/A             N/A 
-1172.4         -1174.4         N/A             N/A 
-6.5            -6.4            N/A             N/A 
-.3             -.3             N/A             N/A 
1351.8          1351.8          N/A             N/A 
38.3            38.0            N/A             N/A 
-21.6           -21.9           N/A             N/A 
-4.7            -4.5            N/A             N/A 
-5.0            -2.9            N/A             N/A 
3.1             3.3             N/A             N/A 
-20.1           -20.3           N/A             N/A 
-199.1          -199.3          N/A             N/A 
346.5           346.7           N/A             N/A 
-.8             -.4             N/A             N/A 
14.8            14.7            N/A             N/A 
8.4             8.4             N/A             N/A 
-18.2           -18.2           N/A             N/A 
-43.7           -43.6           N/A             N/A 

期望的輸出

Largest number is 1351.8

N/A使用 awk,強制對條目進行數值評估:

awk '{for (i=1;i<=NF;i++) max = $i+0 > max ? $i : max} END{print "Largest number is " max}' data

一種方法可以是:

perl -lane '$_>$m and $m=$_ for @F}{print $m' sample.txt

解釋:

  1. -n選項將逐行處理您的輸入文件。
  2. -e選項會將其後的 Perl 程式碼應用於讀取的每一行輸入。
  3. -a選項將在將每一行讀入單個欄位時將其拆分並將它們儲存在一個數組@F中。
  4. -l選項將使 RS=ORS="\n"
  5. for @F將遍歷每個欄位,目前欄位保存在$_.
  6. 我們將目前欄位與最大值進行比較,如果它超過最大值,則更新最大值。
  7. 當我們完成比較後,我們列印最大的內容。
  8. s 在數字上下文中N/A應被視為 0,因此不會影響結果,除非當然所有數字一開始都是負數。

引用自:https://unix.stackexchange.com/questions/502616