Unix中的带数字排序的排序命令


10

我有file1:

"$lvl=57"
"$lvl=20"
"$lvl=48"
"$lvl=17"
"$lvl=58"

我想要的File2:

"$lvl=17"
"$lvl=20"
"$lvl=48"
"$lvl=57"
"$lvl=58"

基本上按数字排序file1。


当我sort在File1上运行纯Unix ,并且没有任何选项时,我得到了File2。你在做什么不同?您在这个问题上遗漏了什么?
斯科特(Scott)

Answers:


17

我喜欢-V --version-sort:在许多情况下,它在混合字符串和数字的情况下表现良好

sort -V

我经常使用此选项...

在某个方向上,ls -v用于version-sort ls


10

你需要告诉sort -n排序后的部分=

sort -t = -k 2n

我最近在看这个^^。但是还有一个问。做-k2n什么?这与数字排序有关吗?谢谢。
αғsнιη

2
@KasiyA -k定义一个排序键。有关详细信息,请参见手册页。-k2n定义一个排序键,该键从第二个字段开始,到行尾为止,并使其成为数字排序键。
斯特凡Chazelas

0

使用排序:

sort -n file1 > file2

-n,--numeric-sort
根据字符串数值进行比较

 sort -g file1 > file 2

-g,--general-numeric-sort


3
不,所有这些行的排名都相同,sort -n因为它们不是以数字开头。对它们进行排序的原因是对具有相同排名的行进行的最后一次全行排序(按词法,而不是数字)。那会"$lvl=17"在之前排序"$lvl=2"
斯特凡Chazelas

@StéphaneChazelas感谢您指出。
Hackaholic 2014年

套用,-n并且-g是多余这里输入不是数值。因此,此答案具有误导性,因此令人不快(也请注意,-g且long选项是GNU特定的)。
斯特凡Chazelas

但是-g是很好的通用数字排序
Hackaholic 2014年

那仍然是用于对数值进行排序,不同之-n处在于它不限于十进制整数。"$lvl=17"在进行"$lvl=2"最后一次排序时,仍会先进行排序。
斯特凡Chazelas

0

我发现,您只要运行sort -h,它将起作用。他们称之为--human-numberic-sort

sort -h file1 > file2

-1

sort -n是您要使用的。它在对数字进行排序时进行排序。sort -k 2 -n file1


2
但是OP希望按升序排序,这是默认设置。您为什么建议反向订购?
G-Man说'Resstate Monica''s

当字段用制表符空格分隔并且在OP的情况下不起作用时,以上方法是正确的。
αғsнιη
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.