Linux
獲取所有第 1-3 列和第 4 列的最大值
給定一個輸入 txt 文件:
$ cat input.txt -1 23 34 cheese 34 20 15 cheese -4 -4 20 tomato 13 -3 14 tomato 4 6 7 tomato -3 -3 -3 potato
我可以根據第 4 列統一數據,使用以下方法在第 1 列中保留最大值的記錄:
$ cat input.txt | sort -k4 -k1,1rn | uniq -f3
這使:
34 20 15 cheese 13 -3 14 tomato -3 -3 -3 potato
但是,我想統一第 4 列上的數據並保留具有相同第 4 列的所有記錄中的最大值。例如:
34 23 34 cheese 13 6 20 tomato -3 -3 -3 potato
有什麼快速的方法來實現這一點嗎?
使用 AWK:
#!/usr/bin/awk -f !keys[$4] { keys[$4] = 1; for (i = 1; i < 4; i++) max[$4][i] = $i } { for (i = 1; i < 4; i++) { if (max[$4][i] < $i) max[$4][i] = $i } } END { for (key in max) print max[key][1], max[key][2], max[key][3], key }
這將跟踪第四列中每個鍵的三個最大值。
有一個警告:不維護鍵的順序。