2つの数値フィールドを並べ替える方法

2つの数値フィールドを並べ替える方法

次のファイル名のリストがあります。

epdb_0_0.pdb
epdb_0_10.pdb
epdb_0_11.pdb
epdb_0_12.pdb
epdb_0_13.pdb
epdb_0_14.pdb
epdb_0_15.pdb
epdb_0_16.pdb
epdb_0_17.pdb
epdb_0_18.pdb
epdb_0_19.pdb
epdb_0_1.pdb
epdb_0_20.pdb
epdb_0_21.pdb
epdb_0_22.pdb
epdb_0_23.pdb
epdb_0_24.pdb
epdb_0_25.pdb
epdb_0_26.pdb
epdb_0_27.pdb
epdb_0_28.pdb
epdb_0_29.pdb
epdb_0_2.pdb
epdb_0_30.pdb
...

Unix sortコマンドを使用してリストを次のように作成するには:

epdb_0_0.pdb
epdb_0_1.pdb
epdb_0_2.pdb
...
epdb_0_10.pdb
epdb_0_11.pdb
epdb_0_12.pdb
epdb_0_13.pdb
epdb_0_14.pdb
epdb_0_15.pdb
epdb_0_16.pdb
epdb_0_17.pdb
...
epdb_1_0.pdb
epdb_1_2.pdb
epdb_1_3.pdb
...

私はこれ--key= flagを組み合わせて使用​​することを知っていますが、iwht -n or -g動作させることはできません。

答え1

特定の方法でファイル名のリストをソートする代わりに、次のコマンドを使用できます。

ls -1v *.pdb

必要な順序でファイルを一覧表示することから始めます。

答え2

次のことができます。

$ cat file.txt | sort -t"_" | sort -n -k3 -t"_"
  • file.txt には、ソートされていない最初のリストが含まれています。

乾杯。

答え3

努力する:

sort -t "_" -k2 -k3 -g <filename>

-t "_"- フィールド区切り記号は次のとおりです。_

-k2- 2番目の列の最初の種類

-k3- 次に、3番目の列を並べ替えます。

-g- 一般的な数値ソート

答え4

sort -V

-V, --version ソート テキスト内の(バージョン)番号の自然な順序

関連情報