2010-10-26 71 views
1

我有一個文件FILE1.TXT數據:restriced鍵排序在UNIX

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窗戶。我的那種用法是

用法:排序[-o輸出] [-cmubdfinr] [-t字符] [-T字符] [-k keydef] ... [文件]

請提供儘可能soultion。

回答

1

如果無法使用「stable」選項進行排序,則可以使用「cat -n」或awk製作額外的鍵,在需要原始訂單時使用該鍵,然後剝離它稍後關閉。爲什麼不告訴排序該逗號是字段分隔符,那麼你不需要計算23個字符。

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

如果排序鍵相同,則保留原始順序。

+0

謝謝Ralph.It完美的作品 – padmakumar 2010-10-26 17:44:42

4

貌似stability問題,所以儘量使用--stable選項:

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

更新:
看來,SFU不支持-s選項和不穩定所有的時間。您可以嘗試使用另一種類型,如unxutils附帶的那種。

+0

我使用SFU3.5 for windows。排序用法排序:非法選項' - ' 用法:sort [-o output] [-cmubdfinr] [-t char] [-T char] [-k keydef] ... [文件] – padmakumar 2010-10-26 13:23:48

+0

@padmakumar:問題是你得到一個不穩定的排序,你不能在SFU中使用'-s'選項。您應該考慮使用其他實現 - 請參閱我的更新。 – tanascius 2010-10-26 13:38:02

+0

感謝tanascius的支持。 – padmakumar 2010-10-26 17:45:10