AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1123499
Accepted
deepblue_86
deepblue_86
Asked: 2019-03-07 06:14:44 +0800 CST2019-03-07 06:14:44 +0800 CST 2019-03-07 06:14:44 +0800 CST

在第一列中的字符串重复时使用排序命令

  • 772

我有一个数据文件如下;

ALIC 5.55 2.65 3.45
ALIC 2.56 2.78 3.99 
AMC4 3.55 3.66 4.88
AMC4 3.00 3.67 4.78
ALIC 1.00 1.00 1.00
ALIC 0.95 1.00 1.00
AMC4 0.50 1.00 1.00
AMC4 0.01 1.00 1.00

我需要对第一列中的这些行进行排序,如下所示;

ALIC 5.55 2.65 3.45
ALIC 2.56 2.78 3.99 
ALIC 1.00 1.00 1.00
ALIC 0.95 1.00 1.00
AMC4 3.55 3.66 4.88
AMC4 3.00 3.67 4.78
AMC4 0.50 1.00 1.00
AMC4 0.01 1.00 1.00

但是当我执行时sort -k 1 data,我看到第二列中的数值按升序排序。哪个命令产生上述排序?

sort
  • 2 2 个回答
  • 432 Views

2 个回答

  • Voted
  1. Best Answer
    steeldriver
    2019-03-07T06:19:55+08:002019-03-07T06:19:55+08:00

    您需要做两件事。

    首先,sort -k 1 从键 1 开始,但默认在行尾停止:仅对键 1 进行排序,您需要-k 1,1

    其次,默认情况下,GNUsort在整行上执行最后的“最后手段”排序——为了抑制这种情况,您需要添加--stable选项。

    所以

    $ sort --stable -k 1,1 data
    ALIC 5.55 2.65 3.45
    ALIC 2.56 2.78 3.99
    ALIC 1.00 1.00 1.00
    ALIC 0.95 1.00 1.00
    AMC4 3.55 3.66 4.88
    AMC4 3.00 3.67 4.78
    AMC4 0.50 1.00 1.00
    AMC4 0.01 1.00 1.00
    
    • 2
  2. PerlDuck
    2019-03-07T06:27:46+08:002019-03-07T06:27:46+08:00

    这将按升序(像往常一样)按第一列排序,然后按降序(反向)按第二列排序。第二列被解释为一个数字:

    $ sort -k 1,1 -k 2nr,2 < in.txt
    ALIC 5.55 2.65 3.45
    ALIC 2.56 2.78 3.99
    ALIC 1.00 1.00 1.00
    ALIC 0.95 1.00 1.00
    AMC4 3.55 3.66 4.88
    AMC4 3.00 3.67 4.78
    AMC4 0.50 1.00 1.00
    AMC4 0.01 1.00 1.00
    

    您可能需要添加--debug标志以准确查看哪些键sort操作:

    $ sort --debug -k 1,1 -k 2nr,2 < in.txt
    ALIC 5.55 2.65 3.45
    ____
         ____
    ___________________
    ALIC 2.56 2.78 3.99
    ____
         ____
    ___________________
    ALIC 1.00 1.00 1.00
    ____
         ____
    ___________________
    ...
    
    • 1

相关问题

  • Nautilus“神秘地”对名称列进行排序。如何更改整理顺序?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve