shell - unix 命令 : how to get top n records

标签 shell sorting unix scripting

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

例如
输入:

  • 1
  • 2 b
  • 3 c
  • 4 天
  • 5 电子

  • 输出(获得前 3 个):
  • 5 电子
  • 4 天
  • 3 c

  • 目前我正在做:
    cat myfile.txt | sort -k1nr | head -3 > my_output.txt
    

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

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

    有什么命令可以用来获取前 3 条记录吗?

    最佳答案

    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
    

    关于shell - unix 命令 : how to get top n records,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24253255/

    相关文章:

    linux - 当涉及到失败状态时,shell 函数可以充当命令吗?

    arrays - 按时间戳对对象排序,然后对依赖项进行分组

    ruby - Ubuntu 在启动时启动 Rails

    c - 以原子方式更改文件的属性

    linux - 我将如何使用套接字让多个进程与中央进程通信?

    bash - 将 pipelinev shell 作为 bash 脚本的一部分运行

    python - 如何在反向 shell 中处理 rm 和 cp 命令

    linux - Cat 数千个文件

    sorting - Java 8 - 通过具有在数组中定义的顺序的属性对对象集合进行排序

    使用 dc.js 对条形图中的条形进行排序