我有一个文件名列表,如下所示:
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, --版本排序 文本中(版本)数字的自然排序