私は今このブログを読んでいます: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
ソートには文字列数値を使用します。最初の列を具体的に見なければならないことをどうやって知ることができますか?
答え1
多くのオプションが
sort
線の比較方法に影響します。
これがどのように機能するかを説明しますinfo coreutils sort invocation
。sort
行ペアは次のように比較されます。各フィールドのペアは、差が見つかるかフィールドが残らなくなるまで、関連するソートオプションに従ってコマンドライン
sort
(参照)で指定された順序で比較されます。--key
キーフィールドを指定しない場合、sort
行全体の主キーが使用されます。。
したがって、sort -n
入力はキーフィールドが指定されていないため、行全体を比較して数値でソートされます(以下の説明を参照)。
-n
--numeric-sort
--sort=numeric
数値順に並べ替えます。各行の先頭にある数字オプションのスペース、オプションのシンボル、
-
千単位の区切り文字で区切ることができるゼロ個以上の数字、オプションで小数点文字、およびゼロ個以上の数字で構成されます。 NULL番号はこのように扱われます0
。ロケールは、LC_NUMERIC
小数点文字と千単位の区切り文字を指定します。デフォルトでは、スペースはスペースまたはタブ文字ですが、LC_CTYPE
地域設定に応じて変更できます。比較的正確です。丸めエラーはありません。
答え2
どうせそれがそんなことだから。行を揃えます。ソートは常に2つの文字列の先頭を比較することによって行われます(各場合はコマンドだけでなく、sort
紙に単語をソートする方法を確認してください)。まもなく。
-n
モードでは、sort
数値を形成する限り、各行の先頭にある文字を読み取り、その番号を最初の要素として解釈します。 2番目の要素は解釈可能な数字の後の最初の文字になり、3番目の要素は数字の後の2番目の文字になります。
どのモードでもsort
ソート操作以外には何もしないので、常に最初の要素を最初に比較し、「なぜ後で出てくる行の一部をソートしないのか」という質問はありません.
sort
したがって、フラグを使用しないと、-k
データは列内のものとして扱われません。-n
文字列の先頭にあるすべての文字を数字として解釈し、単一の「スーパー文字」として解釈したい特別な例外を除いて、文字列を並べ替えます。
答え3
そのような概念はありません。リストしかし、概念があります。フィールド、オプションがあります--field-separator
。
--key=KEYDEF
行は複数のキーフィールド(行内で任意の順序で表示できます)で並べ替えることができ、空白、数字キー、昇順または降順を無視するようにすべてのキー定義を個別に指定できます。すべての主要仕様に使用できるサブオプションは11です。
このman sort
ページは完全に不適切です。少なくともそれを参照してくださいinfo sort
。
また、読むことができますhttps://www.gnu.org/software/coreutils/manual/coreutils.pdfSection 7.1 sort: Sort text files
以下を含む10ページの詳細まで下にスクロールします。
sort -t : -b -k 5,5 -k 3,3n /etc/passwd
このセクションでは、完全に柔軟なDSU慣用語(Decorate、Sort、Un装飾)も参照します。