我似乎无法按照我的意愿对以下数据进行排序;
find output/ -type f -name *.raw | sort
output/rtp.0.0.raw
output/rtp.0.10.raw
output/rtp.0.11.raw
output/rtp.0.12.raw
output/rtp.0.13.raw
output/rtp.0.14.raw
output/rtp.0.15.raw
output/rtp.0.16.raw
output/rtp.0.17.raw
output/rtp.0.18.raw
output/rtp.0.19.raw
output/rtp.0.1.raw
output/rtp.0.20.raw
output/rtp.0.2.raw
output/rtp.0.3.raw
output/rtp.0.4.raw
output/rtp.0.5.raw
output/rtp.0.6.raw
output/rtp.0.7.raw
output/rtp.0.8.raw
output/rtp.0.9.raw
在上面的示例中,我没有向sort
命令传递任何参数。无论我使用什么选项,我都无法接近我想要的结果。我想要以下输出;
find output/ -type f -name *.raw | sort
output/rtp.0.0.raw
output/rtp.0.1.raw
output/rtp.0.2.raw
output/rtp.0.3.raw
output/rtp.0.4.raw
output/rtp.0.5.raw
output/rtp.0.6.raw
output/rtp.0.7.raw
output/rtp.0.8.raw
output/rtp.0.9.raw
output/rtp.0.10.raw
output/rtp.0.11.raw
output/rtp.0.12.raw
output/rtp.0.13.raw
output/rtp.0.14.raw
output/rtp.0.15.raw
output/rtp.0.16.raw
output/rtp.0.17.raw
output/rtp.0.18.raw
output/rtp.0.19.raw
output/rtp.0.20.raw
我尝试使用-t .
选项将字段分隔符设置为句点。我还尝试使用-k
选项来指定字段,-g
,-h
,-n
,但没有一个选项有帮助。除非我没有正确理解手册页而忽略了我的答案,否则我在手册页中看不到任何可以按要求执行的操作。
我可以使用sort
生成我需要的结果吗?如果是,那该怎么做?
此外,它变得罕见但有时第二列显示为'0'一直向下可能会增加。这可以考虑到排序吗?
答案 0 :(得分:7)
这就是:
$ sort -t'.' -n -k3 a
output/rtp.0.0.raw
output/rtp.0.1.raw
output/rtp.0.2.raw
output/rtp.0.3.raw
output/rtp.0.4.raw
output/rtp.0.5.raw
output/rtp.0.6.raw
output/rtp.0.7.raw
output/rtp.0.8.raw
output/rtp.0.9.raw
output/rtp.0.10.raw
output/rtp.0.11.raw
output/rtp.0.12.raw
output/rtp.0.13.raw
output/rtp.0.14.raw
output/rtp.0.15.raw
output/rtp.0.16.raw
output/rtp.0.17.raw
output/rtp.0.18.raw
output/rtp.0.19.raw
output/rtp.0.20.raw
如您所见,我们需要不同的选择:
-t'.'
将点.
设置为字段分隔符。-n
使其成为数字排序。-k3
查看第3栏。这也是:
$ sort -t'.' -V -k2 a
output/rtp.0.0.raw
output/rtp.0.1.raw
output/rtp.0.2.raw
output/rtp.0.3.raw
output/rtp.0.4.raw
output/rtp.0.5.raw
output/rtp.0.6.raw
output/rtp.0.7.raw
output/rtp.0.8.raw
output/rtp.0.9.raw
output/rtp.0.10.raw
output/rtp.0.11.raw
output/rtp.0.12.raw
output/rtp.0.13.raw
output/rtp.0.14.raw
output/rtp.0.15.raw
output/rtp.0.16.raw
output/rtp.0.17.raw
output/rtp.0.18.raw
output/rtp.0.19.raw
output/rtp.0.20.raw
如您所见,我们需要不同的选择:
-t'.'
将点.
设置为字段分隔符。-V
根据版本对其进行排序。-k2
检查第二栏。答案 1 :(得分:4)
Fedorqui的解决方案很好(+1),但并非所有版本的sort
都支持-V
。对于那些没有的版本,您需要比fedorqui的原始解决方案做更多的工作。这应该足够了:
sort -t. -k2,2 -k3,3 -n
如果使用的话,你会得到一个稍微不同的排序(例如,'05'排序在'1'之前而不是之后):
sort -t. -k2g
(请注意-g
也是非标准的,并且在sort
的所有版本中都不可用。
答案 2 :(得分:1)
sort -t'.' -n -k3
将第3列从最小到最大排序
如果您要从最大到最小排序, 您可以使用'-r'选项:
sort -t'.' -n -r -k3