Como ordenar o arquivo de texto pelo campo rotulado?

0

Eu tenho um arquivo com o formato de linha da seguinte forma:

<something> <file_name> type:file <something> size:<filesize> <something>

Eu gostaria de ordenar numericamente pelo campo "filesize" identificado pelo rótulo "size:". O número da chave simples / offset passado normalmente para ordenar o programa não funciona porque não há um separador estrito - vários espaços podem ocorrer antes do rótulo "size:" - por exemplo, em "file_name". Existe alguma maneira de classificar a partir da linha de comando usando o rótulo anterior como um identificador de campo?

    
por ardabro 29.10.2015 / 22:27

2 respostas

1

Se não dois pontos em <something> , você poderia dizer:

sort -t : -Vk 3 file
    
por 29.10.2015 / 23:38
1

é difícil responder sem uma amostra.

tente algo como (pode ser onlined, não há necessidade de \ if last char is |)

  awk '{for(i=1;i<=NF;i++) 
     if ( substr($i,1,5) == "size:" ) { print substr($i,6) " " $0 ; next ; }}'  file |
    sort -n | awk '{$1="" ; print } '

basicamente

  • primeira pesquisa do awk por campo de tamanho e coloque-a na frente
  • classificar com argumento numérico
  • o último awk remove o argumento numérico.
por 29.10.2015 / 22:54