2012-11-12 63 views
1

逗號劃定文件我有以下幾點:排序使用bash

http://www.google.com/site,11/30/2012 6:51:30 PM 
    http://www.google.com/site,10/1/2012 6:51:30 PM 
    http://www.google.com/site,11/16/2012 6:51:30 PM 
    http://www.google.com/site,8/1/2012 6:51:30 PM 

而且我想它的MM整理/ DD/YYYY

http://www.google.com/site,8/1/2012 6:51:30 PM 
    http://www.google.com/site,10/1/2012 6:51:30 PM 
    http://www.google.com/site,11/16/2012 6:51:30 PM 
    http://www.google.com/site,11/30/2012 6:51:30 PM 

我可以使用sort命令,uniq的命令,TR ,sed等。我沒有訪問awk的權限。有任何想法嗎 ? sort -t "," -k1工作。

回答

1
while read line; do 
    s=$(date -d "${line#*,}" +%s) 
    echo $s $line 
done < input.txt | sort -n | cut -d ' ' -f2- 

因此,對於每一行,因爲時代之日起字符串(自帶逗號之後)創建秒,使用,作爲一個排序鍵並將其從結果輸出中刪除。

+0

有沒有辦法做到這一個單一的排序命令?我感覺我很接近。 –

+0

我不確定你可以告訴'排序'首先檢查年份,然後是月份,然後是月份。 – dimir

1

試着這樣做:

sort -n -t "," -k 2 file.txt 

man sort 
+0

[man sort](http://linux.die.net/man/1/sort) – andrewdotn

+0

這不一定適用:嘗試使用'11/16/2012'和'11/3/2012 '作爲例子的日期。 –

+0

這得到正確的月份 –

0

我做了sort命令一些工作,發現了我的問題,這似乎是工作:

cat s.txt | sort -n -t"/" -k 4,4n -k 5,5n 
    https://www.virustotal.com/,9/16/2012 8:19:00 AM 
    https://www.virustotal.com/,10/6/2012 9:20:59 AM 
    https://www.virustotal.com/,11/1/2012 9:20:22 AM 
    https://www.virustotal.com/,11/4/2012 9:11:02 AM 
    https://www.virustotal.com/,11/6/2012 8:50:27 AM 
    https://www.virustotal.com/,11/12/2012 6:51:32 PM 

反轉:

cat s.txt | sort -n -t"/" -k 4,4nr -k 5,5nr 
    https://www.virustotal.com/,11/12/2012 6:51:32 PM 
    https://www.virustotal.com/,11/6/2012 8:50:27 AM 
    https://www.virustotal.com/,11/4/2012 9:11:02 AM 
    https://www.virustotal.com/,11/1/2012 9:20:22 AM 
    https://www.virustotal.com/,10/6/2012 9:20:59 AM 
    https://www.virustotal.com/,9/16/2012 8:19:00 AM 

不過,我需要在逗號後要做到這一點因爲具有更多「/」的網站將不會像http://site.com/go/to/somelink,9/16/2012 8:19:00 AM

+0

無用的貓發現! –

+0

哈哈確實.... –