我现在正在阅读此博客: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
这使用字符串数值进行排序。它如何知道需要专门查看第一列?
这
info coreutils sort invocation
解释了如何sort
工作:因此
sort -n
,将以数字方式对输入进行排序(如下文进一步解释),比较整行,因为没有指定关键字段:因为无论如何,这就是 sort 的作用。它对线路进行排序。排序总是通过比较两个字符串的开头(在每种情况下,不仅仅是
sort
命令;检查纸上的单词排序)来进行,并且仅当开头相等时,向前移动一个元素并进行比较,依此类推。在
-n
模式下,sort
只需读取每行开头的字符,只要它们形成数字,然后将该数字解释为第一个元素。然后,第二个元素成为可解释为数字之后的第一个字符,第三个元素是可解释为数字之后的第二个字符,依此类推)。在任何模式中,除了
sort
对事物进行排序之外,都不做任何事情,因此,它总是首先比较第一个元素,并且永远不会出现“为什么它不按稍后出现的行的某些部分进行排序”的问题。sort
因此, (不使用其 标志)中没有任何内容-k
将您的数据视为在列中。它对字符串进行排序,但有一个特殊的例外,即-n
它尝试将这些字符串开头的所有字符解释为一个数字,并将其解释为单个“超级字符”。没有列的概念,但有字段的概念,并带有一个
--field-separator
选项。然后,每个字段都可以有一个单独的
--key=KEYDEF
. 行可以按多个键字段排序(可以按行中的任何顺序出现),并且任何键定义都可以独立指定忽略空格、数字键以及升序或降序。有十一个这样的子选项可用于任何关键规范。该
man sort
页面完全不够。至少参考一下info sort
。您还可以阅读https://www.gnu.org/software/coreutils/manual/coreutils.pdf 并向下滚动到
Section 7.1 sort: Sort text files
其中提供十页详细信息,包括类似以下内容:本节还引用了 DSU 习惯用法(Decorate、Sort、Undecorate),这是完全灵活的。