awk pode acessar variáveis de ambiente usando a matriz ENVIRON special. No entanto, embora seja possível atribuir valores a elementos dessa matriz, eles não são transmitidos no ambiente dos comandos executados por awk system , | getline ou print | . Esse ENVIRON array é destinado apenas para awk para obter o valor das variáveis de ambiente para as quais foi passado.
Você pode fazer: system("ls " var) , mas esteja ciente de que a string passada para awk ' system() ' (ou print | ou | getline ) é passada como argumento para sh -c , portanto é interpretado como código shell.
Por exemplo, se a variável awk var contiver foo;rm -rf / , ela não informará ls para listar o arquivo chamado "foo;rm -rf /" , mas listará o arquivo chamado foo e, em seguida, rm comando será executado.
Então, você pode precisar escapar de todos os caracteres especiais para o shell nessa variável var .
Isso pode ser feito, por exemplo, com:
awk '
function escape(s) {
gsub(/'\''/, "&\\&&", s)
return "'\''" s "'\''"
}
{
cmd = "date -d " escape($0) " +%s"
cmd | getline seconds
close(cmd)
print seconds
}'
Embora isso signifique executar um shell e um comando date por linha, é melhor que você faça a leitura do arquivo com o próprio shell:
while IFS= read <&3 -r line; do
date -d "$line" +%s
done 3< the-file