「_」を含む行を数値でソートする方法は?

「_」を含む行を数値でソートする方法は?

これは私のファイル内のファイル名のサブセットです。

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

おすすめ記事