find
応答を使用してソートしたいです。私は単純なパイプラインがfind ... | sort
それを行うと思いましたが、ソート動作は変です。作業を簡単にするには、単純なテキストファイルを使用してください。
asdf/2/22
asdf/2/01
asdf/20/0
asdf/20/1
私の予想結果は
asdf/2/01
asdf/2/22
asdf/20/0
asdf/20/1
または
asdf/20/0
asdf/20/1
asdf/2/01
asdf/2/22
ディレクトリがグループに表示されるようにしたいので、重要ではありません。
私の試みは次のとおりです。
[root@linux6 ~]# cat sort_test | sort
asdf/20/0
asdf/2/01
asdf/20/1
asdf/2/22
[root@linux6 ~]# cat sort_test | sort -d
asdf/20/0
asdf/2/01
asdf/20/1
asdf/2/22
[root@linux6 ~]# cat sort_test | tr "/" "X" | sort
asdfX20X0
asdfX20X1
asdfX2X01
asdfX2X22
[root@linux6 ~]# cat sort_test | tr "/" "_" | sort
asdf_20_0
asdf_2_01
asdf_20_1
asdf_2_22
[root@linux6 ~]#
「X」でのみ機能することに注意してください。英数字以外の文字があると、出力が破損しているようです。私も出力に変化のないオプションを-s
試しました。-t '/'
sort
ソートする-d
項目がないと言っても、英数字以外の文字が最初に削除され、次に行がソートされるようです。alias
[root@linux6 ~]# which sort
/usr/bin/sort
[root@linux6 ~]# uname -a
Linux i-epg-appl1 3.10.0-229.14.1.el7.x86_64 #1 SMP Tue Sep 15 15:05:51 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@linux6 ~]# sort --version
sort (GNU coreutils) 8.22
ベストアンサー1
まず、/
ロケールで並べ替えると無視されます(ほとんどのロケールでコレクション仕様の最後の重みを除くすべての項目はGNUシステム(私のDebianシステム)にあることがわかります)。/
したがって、ソート基準はソートと同じです。 、まるであなたが使用したことがあるかのように。IGNORE
<U002F> IGNORE;IGNORE;IGNORE;<U002F> # 45 /
/usr/share/i18n/locales/iso14651_t1_common
asdf/20/0
asdf/2/01
asdf200
asdf201
-d
ロケールをCに変更できます。ここで、ソートはバイト値のみに基づいています(/
ソートが発生する場合もあります)。今後数字)なので、以前と同じように並べ替えられていますが、たとえば依然として異議申し立てのasdf/2/01
問題があります。asdf/20/0
/
0
asdf/2
asdf/10
-g
ここでは、GNU固有の/オプションを使用する--general-numeric-sort
か、次のことができます。
sort -nt/ -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 -k6,6 -k7,7 -k8,8 -k9,9
各ディレクトリコンポーネントを数値として扱います(これにより、前に2_がソートされます)。
を使用すると、zsh
次のことができます。
printf '%s\n' **/*(Dn)
再帰的なグローバル数値ソートを実行します。