如何对两个数字字段进行排序

如何对两个数字字段进行排序

我有一个文件名列表,如下所示:

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- 第二列的第一次排序

-k3- 然后对第三列进行排序

-g- 一般数字排序

答案4

sort -V

-V, --版本排序 文本中(版本)数字的自然排序

相关内容