如何在shell中对复杂的字符串进行排序

Mév*_*pek 0 sorting bash shell perl awk

我必须像这样排序单元格名称(如果它来自文件或变量则无关紧要):预期结果

BAR.A1
BAR.A1-1
BAR.A2
BAR.A3
BAR.A10
FOO.A1
FOO.B1
FOO.B1-1
Run Code Online (Sandbox Code Playgroud)

我尝试的是导致这个错误的顺序:

BAR.A1
BAR.B1
BAR.B1-1
FOO.A1
FOO.A10 <--- wrong place
FOO.A1-1
FOO.A2
FOO.A3
Run Code Online (Sandbox Code Playgroud)

我尝试了许多组合

sort -n
sort -h
sort -d
Run Code Online (Sandbox Code Playgroud)

没有用.

任何线索?

gle*_*man 5

看起来你想按字母顺序按字段1排序,然后按字段2排序

sort -t. -k 1,1 -k2,2V <<END
FOO.A1
FOO.A1-1
FOO.A2
FOO.A3
FOO.A10
BAR.A1
BAR.B1
BAR.B1-1
END
Run Code Online (Sandbox Code Playgroud)
BAR.A1
BAR.B1
BAR.B1-1
FOO.A1
FOO.A1-1
FOO.A2
FOO.A3
FOO.A10
Run Code Online (Sandbox Code Playgroud)