ordenar linhas de acordo com o dia

4

Eu tenho um arquivo de texto no seguinte formato e preciso classificar as linhas de acordo com a data. Existe alguma maneira simples de fazê-lo (de preferência na bash)?

2013-May-30     2
2013-May-21     10
2013-Jun-27     8
2013-Jun-18     9
2013-Jun-09     17
2013-May-20     21
2013-Jun-10     1
2013-Jun-01     2
2013-Aug-09     6
2013-Aug-08     5
2013-Aug-07     2
...
    
por Martin Vegter 12.08.2013 / 14:21

3 respostas

12

Se você disser ao GNU sort para dividir os campos por um caractere diferente, um traço - no seu caso, é muito fácil classificar isso:

$ sort -n -t"-" -k1 -k2M -k3 file.txt

Exemplo

$ sort -n -t"-" -k1 -k2M -k3 file.txt
2013-May-20     21
2013-May-21     10
2013-May-30     2
2013-Jun-01     2
2013-Jun-09     17
2013-Jun-10     1
2013-Jun-18     9
2013-Jun-27     8
2013-Aug-07     2
2013-Aug-08     5
2013-Aug-09     6

Referência

por 12.08.2013 / 14:34
4

Se o seu sort não for da classificação do GNU e não oferecer suporte à classificação por nomes de mês, você precisará converter esses nomes de mês para algo em que o sort possa classificar:

sed 's/$/-Jan1Feb2Mar3Apr4May5Jun6Jul7Aug8Sep9Oct10Nov11Dec12/
     s/-\(...\)\(.*\)-.*\([0-9]*\)[^-]*$/-/' |
  sort -nt- -k1 -k2 -k3 |
  sed 's/-./-/'
    
por 12.08.2013 / 16:45
1

Sim, existe. Você pode fazer algo como:

sort -k 2,2n -k 3
Sort data using the given column number. The option -k 2,2n -k 3 sorts each column. First, it will sort 2nd column (date mm field) and then 3rd column (day).

Mais informações podem ser encontradas aqui .

    
por 12.08.2013 / 14:35

Tags