為什么這個 awk 腳本不起作用,我想通過讀取資料一次來列印輸入的最小值和最大值。我還想用資料的第一個值初始化 min 和 max 變數。
說我有一個檔案
a 14
a 34
a 234
a 2345
a 1
a 24
我正在使用 awk 列印最小值和最大值:
cat test.txt | awk 'BEGIN {min=$2; max=$2} {if ($2 < min) {min=$2}; if ($2 > max) {max=$2} } END {print "min: " min "max: " max}'
但我得到的結果是:
min: max: 2345
我不明白為什么 min 設定為空白?
uj5u.com熱心網友回復:
該BEGIN {}塊在第一行之前處理,因此$2未定義。
$ cat file
a 14
a 34
a 234
a 2345
a 1
a 24
$ awk 'NR == 1 { min = max = $2; next }
$2 > max { max = $2 }
$2 < min { min = $2 }
END { print "min: " min ", max: " max }' file
min: 1, max: 2345
uj5u.com熱心網友回復:
awk 中的所有數值都以浮點格式存盤,并且沒有與 C INT_MIN,等價INT_MAX的值,因此您只需選擇您希望處理的值范圍并將您初始化max為您希望范圍內的最小可能值考慮,以及min您希望考慮的范圍內的最大可能值。
對于有符號整數值,只需選擇 32 位有符號整數的最小值/最大值是合理的。例如,您可以這樣做:
awk '
BEGIN { min=2147483647; max=-2147483648 }
$2 > max { max=$2 }
$2 < min { min=$2 }
END { print "max: ", max ORS "min: ", min }
' file
示例使用/輸出
使用您的資料file,您將獲得:
$ awk '
> BEGIN { min=2147483647; max=-2147483648 }
> $2 > max { max=$2 }
> $2 < min { min=$2 }
> END { print "max: ", max ORS "min: ", min }
> ' file
max: 2345
min: 1
這就是你要找的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/451498.html
上一篇:數字作為命令列引數并列印計數
下一篇:用awk否定條件
