linux - 如何获取bash中每条记录的最小值和最大值

标签 linux bash unix redhat

我有一个看起来像这样的文件(假设它是使用 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/

相关文章:

linux - Linux 中的 Setfacl 配置问题

bash - 构建包含空格的参数列表

bash - 如何使用 find 和 Perl 列出文件?

bash - 如何将文本粘贴到像 awk 这样的逐行文本过滤器,而不让标准输入回显到屏幕?

c++ - 重新链接使用带有隐式链接的更新共享库的应用程序?

perl fork 远程运行时无法正常工作(通过 ssh)

c - Linux getpwnam() 库依赖

linux - 删除原始文件夹时删除符号链接(symbolic link)

linux - 我如何从 linux shell 脚本解析 yaml 文件

Linux 错误 - setterm : $TERM is not defined./etc/cron.hourly/mcelog.cron: