Aqui está um perl "barulhento":
perl -lane '
for $f (@F) {push @{$x{$f}}, $.} # 1.
} END {
use List::Util qw/any first/;
sub sort_by_count_desc {
map { $_->[0] }
sort { $b->[1] <=> $a->[1] || $a->[0] <=> $b->[0] }
map { [$_, scalar(@{$x{$_}})] }
@_
}
@ordered = sort_by_count_desc(keys %x); # 2.
%result = ();
for ($i=1; $i<=$.; $i++) { # 3.
$node = first { any {$_ == $i} @{$x{$_}} } @ordered; # 4.
$result{$node} = 1;
}
print join "\n", sort_by_count_desc(keys %result);
' df
Onde
- faz um loop sobre as linhas do arquivo e mapeia cada valor para a lista de linhas que aparece em
- cria uma linha ordenada dos valores classificados pelo tamanho da lista de aparências, decrescente
- faz um loop no intervalo de números de linha e para cada número de linha
- localiza o primeiro valor para o qual o número da linha aparece
Isso gera
1
2
4
10