Um script ou comando awk se executa para cada linha que lê?

0

Eu tenho um script awk chamado my_awk:

#!usr/bin/awk -f

{ 
if ($1 == "#START") { FS=":";} 
else if ($1 == "#STOP") { FS = " ";}
else { print $3} 
}

E eu invoquei através de:

cat my_file | awk -f my_awk

Eu sou novo no awk, então sou ignorante sobre o mecanismo do awk. Este script my_awk executará seu comando para o arquivo my_file inteiro ou para cada linha do arquivo?

    
por Zen 17.06.2014 / 15:25

1 resposta

2

Quando você envia algo para um script, o script será executado apenas uma vez. Então, por exemplo, se você fizer:

foo | bar

então bar é chamado apenas uma vez, com seu STDIN sendo o que foo escreveu para STDOUT.

Você tem um uso inútil de cat , já que você pode fazer:

awk -f my_awk < my_file

Ou, como awk pode trabalhar diretamente com argumentos de nome de arquivo:

awk -f my_awk my_file

Se você for mais longe, awk em si é uma ferramenta que funciona linha a linha, mas é realmente chamada apenas uma vez pelo shell. De este tutorial :

Like most UNIX utilities, AWK is line oriented. That is, the pattern specifies a test that is performed with each line read as input.

    
por 17.06.2014 / 15:53