Aspas simples inibem a expansão. Ligue-os.
awk ... '...'"$foo"'...' ...
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?
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.
o awk tem o array ENVIRON
para acessar o ambiente:
$ FOO=bar awk 'BEGIN{print ENVIRON["FOO"]}'
bar
Tags awk shell-script