Comparando 2 linhas usando o awk

1

Entrada

aaaaa|bbbbb|ccccc|ddddd|5|5|4
aaaaa|bbbbb|ccccc|ddddd|10|10|1
wwwww|xxxxx|yyyyy|zzzzz|5|5|2
wwwww|xxxxx|yyyyy|zzzzz|10|10|2

Resultado

aaaaa|bbbbb|ccccc|ddddd|5|5|
wwwww|xxxxx|yyyyy|zzzzz|10|10|

Usado para indexar:

1ª a 4ª coluna (por exemplo, aaaaa | bbbbb | ccccc | ddddd)

A lógica da saída é a seguinte:

  1. Compare a última coluna de registros com o mesmo índice, o registro com o maior valor da última coluna será impresso na saída.

  2. Compare a última coluna de registros com o mesmo índice, se eles forem iguais, o registro com o maior valor para as colunas 5 e 6 será impresso na saída.

por peon 14.02.2017 / 11:00

1 resposta

2

Você pode simplesmente fazer isso com sort ing de acordo e escolher a primeira entrada para cada grupo.

sort filename -t'|' -k1,4 -k7rn -k5,6rn | sort -t'|' -k1,4 -u

Resultado:

aaaaa|bbbbb|ccccc|ddddd|5|5|4
wwwww|xxxxx|yyyyy|zzzzz|10|10|2

O que isso faz é

  • -t'|' define o delimitador de campo como |
  • -k1,4 ordem pelos primeiros 4 campos
  • -k7rn pelo sétimo campo em comparação inversa e numérica
  • -k5,6rn então o mesmo com o quinto e sexto campo
  • | canaliza isso para outro tipo
  • -k1,4 -u o -u representa a exclusividade dos primeiros 4 campos

Assim, toda a operação é como ordenar o arquivo como você deseja, para que sua linha desejada seja exibida primeiro em grupos dos primeiros 4 campos. Em seguida, basta pegar a primeira linha para cada grupo.

    
por 14.02.2017 / 11:34