为了账号安全,请及时绑定邮箱和手机立即绑定

使用Unix排序对多个键进行排序

使用Unix排序对多个键进行排序

精慕HU 2019-11-06 10:51:57
我有可能需要按1-n键排序的大文件。其中一些键可能是数字键,有些则可能不是数字键。这是一个固定宽度的柱状文件,因此没有定界符。有没有一种很好的方法可以用Unix排序呢?使用一个键,就像使用“ -n”一样简单。我已经阅读了手册页并简短地搜索了Google,但是没有找到一个很好的例子。我将如何实现这一目标?注意:由于文件大小可能,我排除了Perl。这将是不得已的办法。
查看完整描述

3 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

使用-k选项(或--key=POS1[,POS2])。它可以出现多次,并且每个键可以具有全局选项(例如n用于数字排序)


查看完整回答
反对 回复 2019-11-06
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

不过请注意:


如果要主要按字段3排序文件,其次要按字段2排序,则不要这样:


sort -k 3 -k 2 < inputfile

您想要这个:


sort -k 3,3 -k 2,2 < inputfile

第一个按从字段3的开始到行尾的字符串对文件排序(可能是唯一的)。


-k, --key=POS1[,POS2]     start a key at POS1 (origin 1), end it at POS2

                          (default end of line)


查看完整回答
反对 回复 2019-11-06
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

-k选项就是您想要的。


-k 1.4,1.5n -k 1.14,1.15n

将在第一个字段中使用字符位置4-5(固定宽度都是一个字段),并将其作为第一个键进行数字排序。


第二个键也是第一个字段中的字符14-15。


(编辑)


示例(我所拥有的都是DOS / cygwin方便的):


dir | \cygwin\bin\sort.exe -k 1.4,1.5n -k 1.40,1.60r

对于数据:


12/10/2008  01:10 PM         1,564,990 outfile.txt

按数字对目录列表进行排序(按月号(pos 4-5),然后按文件名(pos 40-60)反向)。由于没有选项卡,因此所有字段都为1。


查看完整回答
反对 回复 2019-11-06
  • 3 回答
  • 0 关注
  • 516 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信