Como posso usar o comando “sort” em um campo específico?

1

No exemplo abaixo (o arquivo original é muito maior), como posso classificar as linhas w.r.t. número de linha de / 185 / e / 215 /?

/home/sorbilene/GAMIT_PROCESS/displacement/2/185/gsoln/res_2017-185_2017-186/MEAN.SP80.mit.orbit.res:XYZ Reference position :   4256626.64484  2703340.32982  3894478.42832 (IGb08)
/home/sorbilene/GAMIT_PROCESS/displacement/2/215/gsoln/res_2017-215_2017-216/MEAN.SP80.mit.orbit.res:XYZ Reference position :   4256626.82197  2703340.51128  3894478.40716 (IGb08)
/home/sorbilene/GAMIT_PROCESS/displacement/2/185/gsoln/res_2017-185_2017-186/MEAN.SP80.mit.orbit.res:XYZ Reference position :   4256626.64992  2703340.34367  3894478.43906 (IGb08)

As linhas classificadas devem ser as seguintes:

/home/sorbilene/GAMIT_PROCESS/displacement/2/185/gsoln/res_2017-185_2017-186/MEAN.SP80.mit.orbit.res:XYZ Reference position :   4256626.64484  2703340.32982  3894478.42832 (IGb08)
/home/sorbilene/GAMIT_PROCESS/displacement/2/185/gsoln/res_2017-185_2017-186/MEAN.SP80.mit.orbit.res:XYZ Reference position :   4256626.64992  2703340.34367  3894478.43906 (IGb08)
/home/sorbilene/GAMIT_PROCESS/displacement/2/215/gsoln/res_2017-215_2017-216/MEAN.SP80.mit.orbit.res:XYZ Reference position :   4256626.82197  2703340.51128  3894478.40716 (IGb08)
    
por deepblue 12.01.2018 / 08:37

1 resposta

2

sort -t '/' -k 7 -n your_input_file

Explicação:

  • -t '/' define '/' como separador de campo
  • -k 7 recebe o sétimo campo como critério de classificação (o campo vazio antes do primeiro '/' também deve ser contado)
  • -n especifica uma classificação numérica.

Se você deseja manter a ordem do arquivo de entrada para todas as linhas em que o sétimo campo é igual, você pode adicionar (e depois remover) um número de linha como segundo campo de classificação:

nl -n rz your_input_file | sort -n -k 7 -k 1 -t '/' | sed 's/^[0-9]*\t//'

Explicação:

  • nl -n rz adiciona um número de linha com preenchimento zero antes de cada linha
  • O comando sort classifica seguindo o sétimo campo e, em seguida, o número da linha
  • O comando sed exclui o número da linha.
por muclux 12.01.2018 / 08:50