猿问

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

我有可能需要按1-n键排序的大文件。其中一些键可能是数字键,有些则可能不是数字键。这是一个固定宽度的柱状文件,因此没有定界符。

有没有一种很好的方法可以用Unix排序呢?使用一个键,就像使用“ -n”一样简单。我已经阅读了手册页并简短地搜索了Google,但是没有找到一个很好的例子。我将如何实现这一目标?

注意:由于文件大小可能,我排除了Perl。这将是不得已的办法。


精慕HU
浏览 537回答 3
3回答

慕容3067478

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

斯蒂芬大帝

不过请注意:如果要主要按字段3排序文件,其次要按字段2排序,则不要这样:sort -k 3 -k 2 < inputfile您想要这个:sort -k 3,3 -k 2,2 < inputfile第一个按从字段3的开始到行尾的字符串对文件排序(可能是唯一的)。-k, --key=POS1[,POS2]&nbsp; &nbsp; &nbsp;start a key at POS1 (origin 1), end it at POS2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (default end of line)

30秒到达战场

-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&nbsp; 01:10 PM&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1,564,990 outfile.txt按数字对目录列表进行排序(按月号(pos 4-5),然后按文件名(pos 40-60)反向)。由于没有选项卡,因此所有字段都为1。
随时随地看视频慕课网APP
我要回答