【问题标题】:Get smallest line in a file (smallest based on string lexicographic order)获取文件中的最小行(基于字符串字典顺序的最小行)
【发布时间】:2018-06-05 18:49:45
【问题描述】:

给定一个包含以下内容的文件:

2011-03-01
2011-04-01
2011-01-01
2011-05-01
2011-02-01

我想得到:

2011-01-01

如果我们根据字典顺序比较这些行,那么它是文件中最小的行。

实现此目的的一种方法是先对行进行排序,然后返回第一行:

sort file | head -n 1

但是,由于sort,这具有 O(n logn) 的复杂性,而 min 操作应该只需要 O(n ) 其中 n 是行数。

有人知道执行此操作的更智能和/或更有效的方法吗?

【问题讨论】:

标签: linux shell min lexicographic-ordering


【解决方案1】:

你可以试试awk 'NR==1 || $0 < min {min=$0} END {print min}' file,计时看看是否比sort|head

【讨论】:

  • 明显更快。在我的 38M 记录数据集中,当找到 min 时,awk sol'n 的运行速度比 sort 快​​约 6 倍,而找到 max 时,awk 的运行速度比 sort|tail 快约 10 倍
猜你喜欢
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-20
相关资源
最近更新 更多