2012-11-12 38 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

哈哈确实.... –