Com um moderno (versão > 4.0) do GNU awk, você poderia fazer
awk '
FNR>4 {a[$0]=$2; next};
NR==FNR;
END {
PROCINFO["sorted_in"] = "@val_num_asc";
for (i in a) print i;
}
' file1 file2
Explicação:
-
FNR>4 {a[$0]=$2; next};
cria uma matriz dos campos de classificação de linhas sem cabeçalho -
NR==FNR;
avalia TRUE apenas para o primeiro arquivo e só é alcançado paraFNR>4
, fazendo com que as linhas de cabeçalho sejam impressas para o primeiro arquivo -
PROCINFO["sorted_in"] = "@val_num_asc"
classifica a matriz por valor (ou seja, campo armazenado $ 2) -
for (i in a) print i
imprime os índices da matriz classificada (que são as linhas de cabeçalho não armazenadas)
Teste
$ awk 'FNR>4 {a[$0]=$2; next}; NR==FNR; END {PROCINFO["sorted_in"] = "@val_num_asc"; for (i in a) print i;}' file1 file2
header 1
header 2
header 3
lemur 3 dd
cat 4 aa
alligator 4 ca
dog 5 ab
ostrich 10 cd
fish 13 cc
lemming 16 ad