根據表格資料計算列中值的中位數

給定一個檔案使用 ; 作為列分隔符。我們使用以下為 GNU awk 編寫的程式計算第二列中值的中值。提供的輸入是學生組的成績列表:

gawk -F';' '{ sample[NR] = $2 }
 END {
   asort(sample);
   if(NR % 2 == 1) {
     print(sample[int(NR/2) + 1])
   } else {
     print(sample[NR/2])
   }
}' <<EOF
Alice;2
Victor;1
Barbara;1
Casper;4
Deborah;0
Ernest;1
Fabiola;4
Giuseppe;4
EOF

這個程式的輸出是 1

請記住,NR 儲存正在處理的行的編號,因此在 END 塊中它儲存檔案中的總行數。

awk 的許多實現沒有對陣列進行排序的函式,因此需要在使用上面的程式碼之前對其進行定義。