これは私のファイル内のファイル名のサブセットです。
profile_10_1_1
profile_10_1_2
profile_1_1_1
1から始めて昇順に並べ替えようとしています。次のコマンドを使用しました。
sort -n filename
またこれを試しました:
sort -nk filename
ただし、10の項目は常にリストの一番上に表示されます。
目的の出力を取得するためのコマンドを作成するには:
profile_1_1_1
profile_1_1_2
....
profile_9_1_1
....
profile_10_1_1
答え1
FreeBSDとGNUにはsort
これにオプションがあります。-V
sort -V < filename
GNUにはオプションがls
あります-v
。したがって、これらのファイルが存在する場合は、次のことができます。
xargs -d '\n' < filename ls -dv --
zsh
数値で配列をソートする引数拡張フラグがあります。
printf '%s\n' ${(fno)"$(<filename)"}
それ以外の場合は、移植性のために次のことを行う必要があります。
sort -t_ -k1,1 -k2,2n -k3,3n -k4,4n -k5,5n filename
答え2
-V
あなたが望むもの。
-V, --version-sort
natural sort of (version) numbers within text
少なくともGNUでは動作しますsort
。