Bash/Linux使用自定义字段分隔符按第3列排序

jwb*_*ley 0 linux sorting

我似乎无法按照我的意愿对以下数据进行排序;

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
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我没有向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
Run Code Online (Sandbox Code Playgroud)

我已尝试使用-t .选项将字段分隔符设置为句点.此外,我已经尝试用-k指定字段选项,-g,-h,-n,但没有的选项帮助.除非我没有正确理解手册页而忽略了我的答案,否则我在手册页中看不到任何可以按要求执行的操作.

我能否生成我需要的结果sort,如果是,如何?

此外,它变得罕见但有时第二列显示为'0'一直向下可能会增加.可以考虑这种因素吗?

fed*_*qui 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
Run Code Online (Sandbox Code Playgroud)

如您所见,我们需要不同的选择:

  • -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
Run Code Online (Sandbox Code Playgroud)

如您所见,我们需要不同的选择:

  • -t'.'将点设置.为字段分隔符.
  • -V 使其基于版本排序.
  • -k2 检查第二列.