我有一个带有数据的文件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]
请提供可能的灵魂。
答案 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是保留原始订单的。