A rigor, não existe uma forma padrão do AWK. As normas POSIX recomendam apenas que exista uma forma de ordenamento de arrays (estou procurando a fonte), mas nem todas as implementações do AWK têm isso.
Algumas soluções com o Gawk:
Se você quer ordenar a saída utilizando apenas o awk, uma solução é armazenar cada linha resultante numa array e ordená-la com a função asort()
ou asorti()
(ambas da implementação GNU - gawk).
Por exemplo, considerando o arquivo teste.txt
:
:~$ cat teste.txt
banana
abacate
laranja
amora
pera
Seu programa poderia fazer algo como:
:~$ awk '{ arr[NR] = $0 } END { asort(arr); for (n in arr) print arr[n]; }' teste.txt
abacate
amora
banana
laranja
pera
A função asort()
altera os índices!
A função asorti()
faz quase a mesma coisa, a diferença é que podemos ordenar a array pelos índices e copiar o resultado para uma variável de destino:
:~$ awk '{ arr[NR] = $0 } END { asorti(arr, dest); for (n in arr) print dest[n]" "arr[n]; }' teste.txt
1 banana
2 abacate
3 laranja
4 amora
5 pera
Obviamente, neste exemplo os índices já estavam ordenados, mas acho que deu para entender a ideia. ;-)
Alternativamente, ainda com o gawk, você pode fazer o ordenamento dos valores da array com as strings de controle utilizadas na variável interna PROCINFO["sorted_in"]
:
"@unsorted" - comportamento padrão.
"@ind_str_asc" - ordem ascendente das strings.
"@ind_num_asc" - ordem numérica ascendente.
"@val_type_asc" - ordem ascendente de valores (números primeiro).
"@val_str_asc" - ordem ascendente de valores como strings.
"@val_num_asc" - ordem ascendente de valores numéricos.
"@ind_str_desc" - ordem descendente das strings.
"@ind_num_desc" - ordem numérica descendente.
"@val_type_desc" - ordem descendente de valores (números primeiro).
"@val_str_desc" - ordem descendente de valores como strings.
"@val_num_desc" - ordem descendente de valores numéricos.
Se a exclusividade de uso de recursos do awk não for um problema:
Se quiser um resultado menos trabalhoso, porém, a melhor pedida é utilizar o utilitário sort
:
awk '{ programa }' arquivos | sort [opções]