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 -n
或sort --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