多くのファイルが与えられると、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.2n
:sort -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
ソートf2
前f10
、g1
ソート後f2
。
配列に格納されているリストを並べ替えますzsh
(ワイルドカードを使用して現在のディレクトリのファイルを並べ替える代わりに)。
files=(
f1.txt
f10.txt
f2.txt
)
printf '%s\n' ${(n)files}