unix命令:如何获得前n条记录

时间:2014-06-16 22:36:53

标签: shell sorting unix scripting

我想使用unix命令获得前n条记录:

e.g。 输入:

  • 1 a
  • 2 b
  • 3 c
  • 4 d
  • 5 e

输出(获得前3名):

  • 5 e
  • 4 d
  • 3 c

我正在做的事情:

cat myfile.txt | sort -k1nr | head -3 > my_output.txt

它工作正常,但是当文件变大时,它变得非常慢。

它很慢,因为它完全对文件进行排序,而我需要的只是前3个记录。

我可以使用任何命令来获得前3条记录吗?

2 个答案:

答案 0 :(得分:0)

perl -ane '
    BEGIN {@top = ([-1]) x 3} 
    if ($F[0] > $top[0][0]) {
        @top = sort {$a->[0] <=> $b->[0]} @top[1,2], [$F[0], $_];
    } 
    END {print for reverse map {$_->[1]} @top}
' << END_DATA
1 a
2 b
3 c
4 d
5 e
END_DATA
5 e
4 d
3 c

答案 1 :(得分:-1)

您是否尝试过更改命令的顺序?

喜欢这个。

sort -k1nr myfile.txt |头-3&gt; my_output.txt