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.