unix中的受限密钥排序

时间:2010-10-26 12:38:25

标签: unix

我有一个带有数据的文件file1.txt:

2010/09/04,21:53:42.048,a
2010/09/04,21:53:40.923,b
2010/09/04,21:53:40.923,a
2010/09/04,21:50:42.048,a.

我想根据时间戳对文件进行排序。我目前正在使用

 sort  -t% -k1.1,1.23 file1.txt > file2.txt 

我的预期输出是

2010/09/04,21:50:42.048,a
2010/09/04,21:53:40.923,b
2010/09/04,21:53:40.923,a
2010/09/04,21:53:42.048,a

但是,我得到以下输出

2010/09/04,21:50:42.048,a
2010/09/04,21:53:40.923,a
2010/09/04,21:53:40.923,b
2010/09/04,21:53:42.048,a

我正在使用SFU3.5 for windows。我的排序用法是

用法:sort [-o output] [-cmubdfinr] [-t char] [-T char] [-k keydef] ... [files]

请提供可能的灵魂。

2 个答案:

答案 0 :(得分:4)

看起来像stability问题,因此请尝试使用--stable选项:

-s, --stable
      stabilize sort by disabling last-resort comparison

<强>更新
似乎SFU不支持-s选项并且一直不稳定。您可以尝试使用替代排序,例如unxutils附带的排序。

答案 1 :(得分:1)

如果您无法使用“稳定”选项进行排序,那么您可以使用“cat -n”或awk制作额外的键,在需要原始订单时使用该键,并将其删除后来。为什么不告诉排序逗号是字段分隔符,那么你不需要计算23个字符。

awk '{print NR "," $0}' dat | sort -t, -k2,2 -k1n,1 | sed 's/^[^,]*,//'

如果排序键相等,则stable sort是保留原始订单的。