Text Processing: Como ordenar lista por data delimitada por uma string

0

Eu quero classificar o conteúdo de file.txt por data. A data a ordenar está na quarta tabela de dados <td></td> tag

Por exemplo Conteúdo de file.txt :

<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Mar01</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Jan31</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Apr02</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Dec25</td></tr>

Saída desejada: Como posso fazer isso?

<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Jan31</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Dec25</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Mar01</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Apr02</td></tr>

Estou usando o comando sort , mas não está funcionando.

cat file.txt 2> /dev/null | sort -t'>' -k9n -k9.4M -k9.7n

EDITAR: Encontrei este link de referência, mas ainda não funciona corretamente. link

    
por WashichawbachaW 03.04.2018 / 08:25

1 resposta

1

No caso, se cada item <tr> estiver em uma linha separada:

Solução

awk + sort :

awk -F'[<>]' '{ print $(NF-4), $0 }' file.txt | sort -k1,1n -k1.5M | cut -d' ' -f2-
  • -F'[<>]' - trata < e > como separador de campos
  • $(NF-4) - contém o último valor da tag <td> (por exemplo, 2017Jan31 ) de cada linha. Isso é usado como uma chave de classificação.
  • -k1,1n - classifica pelo primeiro campo numericamente (ou seja, por ano de data)
  • -k1.5M - data de classificação de mês a partir do quinto caractere
  • cut -d' ' -f2- - remove uma chave de classificação auxiliar (o primeiro campo)

A saída:

<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Jan31</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Dec25</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Mar01</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Apr02</td></tr>
    
por 03.04.2018 / 08:56