我有一个看起来像这样的文件(假设它是使用 sort 命令排序的)
1234 00:00:01
1234 00:00:02
1234 00:00:03
1235 00:10:00
1235 00:10:12
1235 00:10:15
1236 00:12:01
1236 00:12:05
我想得到每条记录的最小值和最大值,所以输出应该是这样的。
1234 00:00:01
1234 00:00:03
1235 00:10:00
1235 00:10:15
1236 00:12:01
1236 00:12:05
我可以通过做一些事情来实现这一点,比如从最高到最低排序,让第一个唯一值获得最高,然后再次升序排序以获得最低,并合并记录,有没有更快的如何做到这一点?
最佳答案
awk
助您一臂之力!
$ awk '!($1 in min){min[$1]=max[$1]=$2}
min[$1]>$2{min[$1]=$2}
max[$2]<$2{max[$1]=$2}
END{for(k in min) {print k,min[k]; print k,max[k]}}' file
1234 00:00:01
1234 00:00:03
1235 00:10:00
1235 00:10:15
1236 00:12:01
1236 00:12:05
替代排序
$ (sort -k2 file | sort -uk1,1 && sort -k2r file | sort -uk1,1) |
sort
1234 00:00:01
1234 00:00:03
1235 00:10:00
1235 00:10:15
1236 00:12:01
1236 00:12:05
或者,没有最后的排序
paste -d'\n' <(sort -k2 file | sort -uk1,1) <(sort -k2r file | sort -uk1,1)
具有一种主要排序的另一种选择(两种不同的排序,但速度更快)
sort -k2 file | tee >(sort -uk1,1) >(tac | sort -uk1,1) >/dev/null | paste -d'\n'
关于linux - 如何获取bash中每条记录的最小值和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36502432/