Passando uma variável de script shell para um comando AWK

3

Eu quero chamar um script de shell com o seguinte comando.

awk -F $'\xE7' '{OFS ="¬"} { $3 = sprintf("%010s". $3) ; print $0 }' > outputfile

Mas eu quero ser capaz de passar uma variável de script de shell para este comando que será usado para substituir o $3 no comando AWK.

Como faço para passar uma variável de script de shell para esse comando AWK?

    
por mattm123 27.10.2010 / 10:29

3 respostas

-1

Aspas simples inibem a expansão. Ligue-os.

awk ... '...'"$foo"'...' ...
    
por 27.10.2010 / 11:01
5

A maneira correta de fazer isso é usando o recurso de passagem variável do AWK. Além disso, você provavelmente precisará definir OFS uma vez, portanto, você deve fazê-lo na cláusula BEGIN .

awk -F $'\xE7' -v awkvar="$shellvar" 'BEGIN {OFS ="¬"} { $3 = sprintf("%010s". $3) ; print $0, awkvar }' input file > outputfile

Você também pode usar -v para definir OFS :

awk -F $'\xE7' -v awkvar="$shellvar" -v OFS ="¬" '{ $3 = sprintf("%010s". $3) ; print $0, awkvar }' input file > outputfile

Acabei de adicionar a variável à instrução print , pois não sabia exatamente como você queria usá-la.

    
por 27.10.2010 / 22:04
2

o awk tem o array ENVIRON para acessar o ambiente:

$ FOO=bar awk 'BEGIN{print ENVIRON["FOO"]}'
bar
    
por 28.10.2010 / 00:42