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

Shell unix命令:如何获取前n条记录,shell,sorting,unix,scripting,Shell,Sorting,Unix,Scripting,我想使用unix命令获取前n条记录: e、 g。 输入: 1A 2 b 3 c 4d 5 e 输出(获取前3名): 5 e 4d 3 c 目前我正在做: cat myfile.txt | sort -k1nr | head -3 > my_output.txt 它工作正常,但当文件变大时,速度会变得非常慢 它很慢,因为它对文件进行了完全排序,而我需要的只是前3条记录 是否有任何命令可用于获取前3条记录?您是否尝试更改命令的顺序 像这样 sort-k1nr myfile.txt |

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

e、 g。 输入:

  • 1A
  • 2 b
  • 3 c
  • 4d
  • 5 e
输出(获取前3名):

  • 5 e
  • 4d
  • 3 c
目前我正在做:

cat myfile.txt | sort -k1nr | head -3 > my_output.txt
它工作正常,但当文件变大时,速度会变得非常慢

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


是否有任何命令可用于获取前3条记录?

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

像这样


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

请参阅以下内容,以获得一个好的答案:Unix
sort
,是迄今为止对大型文件进行排序的最快方法。如果你的投入那么大,你需要考虑另一种方法。这篇文章应该会有所帮助。大多数人都同意一般情况。然而,给定一个固定的N,您可以在一个专用程序中通过输入单次传递来实现这一点,保持top-N可见。优先级队列可能很方便。通过查看最低条目和条目计数,对于每条记录,如果记录值>最低,则插入;如果count>=limit,则删除lower。这不会对排序所需的工作产生任何影响,这是真正的问题。它将加快在较大文件上的执行。任何时候你可以消除一个进程,你就可以获得速度。允许排序直接在文件上工作,而不必先读取它。为2GB文件排序节省了整整一分钟的时间。在一台使用了10年的电脑上,先在cat上运行9分钟
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