Sintaxe de matriz com AWK

2

Estou perplexo com a resposta desses scripts.

Teste 1:

awk '{line_arr[$0] } END {for (line in line_arr) print line}' text_file

Saída:

1
2
3
4

Trial 2:

awk '{line_arr[$0] } END {for (line in line_arr) print line}' text_file

Saída:

is some text.
Hello. Here
Lots of random
text.

Conteúdo do arquivo:

$ cat text_file
Hello. Here
is some text.
Lots of random
text.

Por que o índice da matriz é armazenado como um valor real?

Por que o segundo teste está fora de ordem?

    
por Michael Bruce 29.08.2016 / 05:38

1 resposta

3

Com essa sintaxe rara, awk armazena suas linhas em um Matriz Associativa . Assim não tem ordem definida. Você atingiu um comportamento indefinido.

Veja como se convencer: imprima o número da linha do próprio array associativo:

$ awk '{line_arr[$0]=NR } END \
       {for (line in line_arr) print line_arr[line]"=>"line } \
      ' text_file

3=>Lots of random
1=>Hello. Here
4=>text.
2=>is some text.
    
por 29.08.2016 / 08:33

Tags