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
    • 最新
    • 标签
主页 / unix / 问题 / 765864
Accepted
barnyard9
barnyard9
Asked: 2023-12-31 18:55:18 +0800 CST2023-12-31 18:55:18 +0800 CST 2023-12-31 18:55:18 +0800 CST

sort -n 命令如何知道在包含数字和文本的文件中需要排序的内容?

  • 772

我现在正在阅读此博客:https ://www.baeldung.com/linux/dir-find-largest-file-recursively

我正在询问这个命令:

find /usr/lib -type f -printf "%s\t%p\n" | sort -n | tail -1
92107656        /usr/lib/x86_64-linux-gnu/libwireshark.so.13.0.3

将%s打印尺寸并%p打印路径。但如何sort -n知道它需要按大小而不是路径排序呢?

我知道这可能是个愚蠢的问题,但无论如何我还是问了。

根据文档,https://man7.org/linux/man-pages/man1/sort.1.html

-n, --numeric-sort
compare according to string numerical value

这使用字符串数值进行排序。它如何知道需要专门查看第一列?

command-line
  • 3 3 个回答
  • 844 Views

3 个回答

  • Voted
  1. Best Answer
    don_crissti
    2023-12-31T19:36:13+08:002023-12-31T19:36:13+08:00

    许多选项会影响sort线的比较方式

    这info coreutils sort invocation解释了如何sort工作:

    一对行的比较如下:根据关联的排序选项,按照命令行上指定的顺序sort比较每对字段(请参阅),直到发现差异或不留下任何字段。如果未指定键字段, 则使用整行的默认键。--keysort

    因此sort -n,将以数字方式对输入进行排序(如下文进一步解释),比较整行,因为没有指定关键字段:

    -n
    --numeric-sort
    --sort=numeric

    按数字排序。该数字以每行开始,由可选的空格、可选的-符号和可能由千位分隔符分隔的零个或多个数字组成,后面可选地跟随一个小数点字符和零个或多个数字。空数被视为0。区域LC_NUMERIC设置指定小数点字符和千位分隔符。默认情况下,空白是空格或制表符,但LC_CTYPE区域设置可以更改这一点。

    比较准确;没有舍入误差。

    • 11
  2. Constantine A. B.
    2023-12-31T19:06:28+08:002023-12-31T19:06:28+08:00

    因为无论如何,这就是 sort 的作用。它对线路进行排序。排序总是通过比较两个字符串的开头(在每种情况下,不仅仅是sort命令;检查纸上的单词排序)来进行,并且仅当开头相等时,向前移动一个元素并进行比较,依此类推。

    在-n模式下,sort只需读取每行开头的字符,只要它们形成数字,然后将该数字解释为第一个元素。然后,第二个元素成为可解释为数字之后的第一个字符,第三个元素是可解释为数字之后的第二个字符,依此类推)。

    在任何模式中,除了sort对事物进行排序之外,都不做任何事情,因此,它总是首先比较第一个元素,并且永远不会出现“为什么它不按稍后出现的行的某些部分进行排序”的问题。

    sort因此, (不使用其 标志)中没有任何内容-k将您的数据视为在列中。它对字符串进行排序,但有一个特殊的例外,即-n它尝试将这些字符串开头的所有字符解释为一个数字,并将其解释为单个“超级字符”。

    • 4
  3. Paul_Pedant
    2023-12-31T21:23:23+08:002023-12-31T21:23:23+08:00

    没有列的概念,但有字段的概念,并带有一个--field-separator选项。

    然后,每个字段都可以有一个单独的--key=KEYDEF. 行可以按多个键字段排序(可以按行中的任何顺序出现),并且任何键定义都可以独立指定忽略空格、数字键以及升序或降序。有十一个这样的子选项可用于任何关键规范。

    该man sort页面完全不够。至少参考一下info sort。

    您还可以阅读https://www.gnu.org/software/coreutils/manual/coreutils.pdf 并向下滚动到Section 7.1 sort: Sort text files其中提供十页详细信息,包括类似以下内容:

    sort -t : -b -k 5,5 -k 3,3n /etc/passwd
    

    本节还引用了 DSU 习惯用法(Decorate、Sort、Undecorate),这是完全灵活的。

    • 2

相关问题

  • ip 命令是否支持通配符?

  • 需要许多参数的实用程序的推荐界面是什么?[关闭]

  • 远程运行 X 应用程序,在远程主机上运行 GUI [关闭]

  • 使 mysql CLI 以交互方式向我询问密码

  • 没有服务器的命令行 pub/sub?

Sidebar

Stats

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

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve