unix中的受限密钥排序

unix中的受限密钥排序,unix,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,2

我有一个文件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

我正在为windows使用SFU3.5。我的分类用法是

用法:排序[-o输出][-cmubdfinr][-t字符][-t字符][-k键定义]。。。[档案]

请提供可能的解决方案。

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

-s, --stable
      stabilize sort by disabling last-resort comparison
更新:
SFU似乎不支持
-s
选项,并且始终不稳定。您可以尝试使用另一种排序,如随附的排序。

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

-s, --stable
      stabilize sort by disabling last-resort comparison
更新:

SFU似乎不支持
-s
选项,并且始终不稳定。您可以尝试使用另一种排序,如随附的排序。

如果无法使用“稳定”选项进行排序,则可以使用“cat-n”或awk创建一个额外的键,在需要原始顺序时在排序中使用该键,然后将其删除。为什么不告诉sort逗号也是字段分隔符,那么就不需要计算23个字符了

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

如果排序键相等,则保留原始顺序。

如果无法使用“稳定”选项进行排序,则可以使用“cat-n”或awk创建一个额外的键,在需要原始顺序时在排序中使用该键,然后将其删除。为什么不告诉sort逗号也是字段分隔符,那么就不需要计算23个字符了

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

如果排序键相等,则保留原始顺序。

我正在使用SFU3.5 for windows。排序用法为排序:非法选项“-”用法:排序[-o输出][-cmubdfinr][-t字符][-t字符][-k键定义]。。。[files]@padmakumar:问题是排序不稳定,不能将
-s
选项用于SFU。您应该考虑使用另一个实现——请参见我的更新。谢谢TANASCUS支持。我正在使用SFU3.5进行Windows操作。排序用法为排序:非法选项“-”用法:排序[-o输出][-cmubdfinr][-t字符][-t字符][-k键定义]。。。[files]@padmakumar:问题是排序不稳定,不能将
-s
选项用于SFU。您应该考虑使用另一个实现——请参见我的更新。谢谢TANASCUS支持。