我必须像这样对单元格名称进行排序(无论它来自文件还是变量都没关系):预期结果
BAR.A1
BAR.A1-1
BAR.A2
BAR.A3
BAR.A10
FOO.A1
FOO.B1
FOO.B1-1
我尝试的结果顺序错误:
BAR.A1
BAR.B1
BAR.B1-1
FOO.A1
FOO.A10 <--- wrong place
FOO.A1-1
FOO.A2
FOO.A3
我尝试了
的许多组合sort -n
sort -h
sort -d
无济于事。
有任何线索吗?
答案 0 :(得分: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
BAR.A1
BAR.B1
BAR.B1-1
FOO.A1
FOO.A1-1
FOO.A2
FOO.A3
FOO.A10
答案 1 :(得分:1)
仍然有很多不清楚的地方(您并不是在说您想要的输出),但是sort -g
应该做到:
$ cat s.txt
FOO.A1
FOO.A1-1
FOO.A2
FOO.A3
FOO.A10
BAR.A1
BAR.B1
BAR.B1-1
$ sort -g s.txt
BAR.A1
BAR.B1
BAR.B1-1
FOO.A1
FOO.A1-1
FOO.A10
FOO.A2
FOO.A3
-g
的定义如下:
-g,--general-numeric-sort,--sort = general-numeric 按一般数值排序。与-n相反,此选项处理常规浮点。它的格式比-n允许的格式更宽松,但是在性能上有很大的缺陷。
但是-n
也适合这里,因此您所需的输出不清楚。
根据您的进一步更新,也许这就是您想要的:
$ sort -t '.' -k 2 -V < s.txt
BAR.A1
FOO.A1
FOO.A1-1
FOO.A2
FOO.A3
FOO.A10
BAR.B1
BAR.B1-1
答案 2 :(得分:1)
perl -MSort::Key::Natural=natsort -e'print for natsort <>'
答案 3 :(得分:0)
版本排序
$ sort -V file
BAR.A1
BAR.B1
BAR.B1-1
FOO.A1
FOO.A2
FOO.A3
FOO.A10
FOO.A1-1
根据明确的问题更新
$ sort -t- -k1,1V -k2 file
BAR.A1
BAR.B1
BAR.B1-1
FOO.A1
FOO.A1-1
FOO.A2
FOO.A3
FOO.A10