我想使用unix命令获得前n条记录:
e.g。 输入:
输出(获得前3名):
我正在做的事情:
cat myfile.txt | sort -k1nr | head -3 > my_output.txt
它工作正常,但是当文件变大时,它变得非常慢。
它很慢,因为它完全对文件进行排序,而我需要的只是前3个记录。
我可以使用任何命令来获得前3条记录吗?
答案 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