Existem algumas maneiras pelas quais você pode passar variáveis de ambiente para um awk
script / command:
Método 1
Isso faz com que o shell expanda a variável $path1
antes de executar o comando awk
.
$ echo $path1
/usr/tmp/foo/bar/baz
$ awk -F'/' 'END{a="'$path1'"; split(a,arr,FS); print(arr[5])}' /dev/null
bar
Método # 2
Passe o env. variável como uma variável awk, a
.
$ awk -F '/' 'END{split(a,arr,FS); print(arr[5])}' a=$path1 /dev/null
bar
Método 3
Explicitamente passe awk
uma variável usando a opção -v
.
$ awk -F'/' -v a=$path1 'END{split(a,arr,FS); print(arr[5])}' /dev/null
bar
Depuração
Você pode ativar a verbosidade do shell configurando set -x
antes de executar qualquer um desses comandos para ver o que está acontecendo. Aqui está o método # 2 como um exemplo:
$ set -x
$ awk -F '/' 'END{split(a,arr,FS); print(arr[5])}' a=$path1 /dev/null
+ awk -F / 'END{split(a,arr,FS); print(arr[5])}' a=/usr/tmp/foo/bar/baz /dev/null
bar
O exemplo acima mostra set -x
sendo executado seguido pela linha awk. Você pode ver que, quando executada, a variável a
tem o valor de $path1
já expandido quando é executado.
Outro exemplo, este método de tempo # 1:
$ awk -F'/' 'END{a="'$path1'";split(a,arr,FS); print(arr[5])}' /dev/null
+ awk -F/ 'END{a="/usr/tmp/foo/bar/baz";split(a,arr,FS); print(arr[5])}'
bar
Aqui você pode ver que o shell está expandindo definitivamente a variável $path1
antes de executar awk
.