Получить наименьшую строку в файле (наименьшую на основе лексикографического порядка строк)

Дан файл, который содержит:

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

Я хотел бы получить:

2011-01-01

которая является самой маленькой строкой в ​​файле, если мы сравниваем строки на основе их лексикографического порядка.

Один из способов добиться этого - сначала отсортировать строки, а затем вернуть первую строку:

sort file | head -n 1

Однако это имеет сложность O (n logn) из-за sort в то время как минимальная операция должна быть выполнимой в простом O (n), где n - количество строк.

Кто-нибудь знает о более разумном и / или более эффективном способе выполнения этого?

1 ответ

Решение

Вы могли бы попробовать awk 'NR==1 || $0 < min {min=$0} END {print min}' file, время и посмотреть, если это будет быстрее, чем sort|head

Другие вопросы по тегам