给定一个输入 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
有什么快速方法可以实现这一目标吗?
答案1
使用 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 }
这会跟踪第四列中每个键的三个最大值。
有一个警告:键的顺序不被维护。