linux命令:SORT,根据字段的数值

例如: File.txt的内容:

100 foo 2 bar 300 tuu 

当使用'sort -k 1,1 File.txt'时,行的顺序不会改变,但我们期待:

  2 bar 100 foo 300 tuu 

我们如何根据绝对数值对数字进行sorting呢?

看一下手册页sorting …

  -n, --numeric-sort compare according to string numerical value 

所以这里是一个例子

 sort -n filename 

免责声明:我知道这个问题很久以前就已经回答了,但也许这对一些问题的访客是有帮助的。

如果您sorting混合文本和数字的string,例如滚动日志的文件名,那么使用sort -n进行sort -n不会按预期工作:

 $ ls |sort -n output.log.1 output.log.10 output.log.11 output.log.12 output.log.13 output.log.14 output.log.15 output.log.16 output.log.17 output.log.18 output.log.19 output.log.2 output.log.20 output.log.3 output.log.4 output.log.5 output.log.6 output.log.7 output.log.8 output.log.9 

在这种情况下,选项-V做到这一点:

 $ ls |sort -V output.log.1 output.log.2 output.log.3 output.log.4 output.log.5 output.log.6 output.log.7 output.log.8 output.log.9 output.log.10 output.log.11 output.log.12 output.log.13 output.log.14 output.log.15 output.log.16 output.log.17 output.log.18 output.log.19 output.log.20 

从手册页:

  -V, --version-sort natural sort of (version) numbers within text 

那么,这里的大多数答案是指

 sort -n 

不过,我不确定这是否适用于负数。 这里是我在Fedora 9上用6.10版本得到的结果。

input文件:

 -0.907928466796875 -0.61614990234375 1.135406494140625 0.48614501953125 -0.4140167236328125 

输出:

 -0.4140167236328125 0.48614501953125 -0.61614990234375 -0.907928466796875 1.135406494140625 

这显然不是按数字sorting的。

那么,我想一个更准确的答案是使用sort -n但只有所有的值都是正数。

PS:使用sort -g返回这个例子相同的结果

编辑:

看起来像区域设置会影响减号如何影响顺序( 请参阅此处 )。 为了得到适当的结果,我只是做了:

 LC_ALL=C sort -n filename.txt 

你必须使用数字sorting选项:

 sort -n -k 1,1 File.txt 

使用sort -nsort --numeric-sort

您必须执行以下命令:

sort -n -k1 filename

这应该做到这一点:)

使用sort -nr按降序sorting。 参考

分类

请参阅上述手册页以作进一步参考

  echo " Enter any values to sorting: " read n i=0; t=0; echo " Enter the n value: " for(( i=0;i<n;i++ )) do read s[$i] done for(( i=0;i<n;i++ )) do for(( j=i+1;j<n;j++ )) do if [ ${s[$i]} -gt ${s[$j]} ] then t=${s[$i]} s[$i]=${s[$j]} s[$j]=$t fi done done for(( i=0;i<n;i++ )) do echo " ${s[$i]} " done