ソート順の説明

ソート順の説明

多くのファイルが与えられると、sort -n次のような結果が出ました。

f1.txt
f10.txt
f2.txt

これは私にとって正しいことではないようです。説明は何ですか?

基本的にこれを得ることはできますか?

f1.txt
f2.txt
f10.txt

答え1

使用することをお勧めします

sort -V data.txt

-V「バージョンの並べ替え」を意味し、基本的にアルファベットと数字を正しく処理するため、ファイルが多い場合は次のように言います。

f1.txt
f10.txt
f2.txt
a1.txt
a10.txt
a2.txt

そしてsort -Vそれをあなたに与えてください。

a1.txt
a2.txt
a10.txt
f1.txt
f2.txt
f10.txt

またはsort -k 1.2nsort -n -k 1.2

a1.txt
f1.txt
a2.txt
f2.txt
a10.txt
f10.txt

答え2

データケーブルがないためスタート数値の場合、-n単一の並べ替えは数値を数値ではなく扱います(したがって元の位置に置きます)。データが数値として解釈できなくなったら、-n管理を中止します。使用する必要があります-k目の整列オプション:

sort -k 1.2n data.txt

2番目の文字から始めて、最初のフィールドで定義されたキーを使用してソートし、その点から数字の比較を使用します。

答え3

GNUソート-nオプションと一緒に使用strnumcmp()これをしないでください。数値変換(numcompare()関数を参照)。これは純粋に文字列比較です。

キーフィールドが数字で始まらない場合、最後のソート方法はバイトごとにソートされ、ロケールによってアルファベット順の結果が得られます。

例:

$ LC_ALL=en_US.utf8 sort -n test.txt
f10.txt
f1.txt
f2.txt

$ LC_ALL=C sort -n test.txt
f1.txt
f10.txt
f2.txt

答え4

を使用している場合は、次を使用してzshリストを数字で並べ替えることができます。

printf '%s\n' *.txt(n)

これはGNUsort -vまたはGNUls-v並べ替えに似ています。

ls -vd -- *.txt

ソートf2f10g1ソート後f2

配列に格納されているリストを並べ替えますzsh(ワイルドカードを使用して現在のディレクトリのファイルを並べ替える代わりに)。

files=(
  f1.txt
  f10.txt
  f2.txt
)
printf '%s\n' ${(n)files}    

関連情報