Para passar strings para um script awk, passe-as por variáveis de ambiente.
export VAR VAR1
awk '
1
$0 == ENVIRON["VAR"] {print ENVIRON["VAR1"]}
' ~/Scripts/tmp/file.txt
Eu reorganizei seu script para simplificar a lógica. Eu também substituí a correspondência de expressão regular por uma comparação de string: com a correspondência de expressão regular, $VAR
seria tratado como uma expressão regular, não executaria uma comparação de cadeia de caracteres. E /$VAR/
nem usaria o valor de VAR
(que é sintaxe Perl, não awk), você precisaria de match($0, VAR)
para isso.
Uma nota sobre algumas outras soluções que realmente não funcionam (elas funcionam apenas se as variáveis não contiverem nenhum caractere especial, qual caractere é especial depende do método):
-
awk -v awkvar="$VAR" '$0 == awkvar …'
expande as barras invertidas no conteúdo da linha. -
awk "/$VAR/" …
faz o shell expandir o valor deVAR
como um fragmento do awk. Por exemplo, sefile.txt
contiver^/ {system("touch ~/naughty")} /
, o comandotouch ~/naughty
será executado.
Uma abordagem alternativa é fazer o awk ler todos os arquivos.
awk '
BEGIN { VAR1 = getline <"~/Scripts/tmp/file1.txt"; }
NR == 1 {VAR = $0}
1
$0 == ENVIRON["VAR"] {print ENVIRON["VAR1"]}
' ~/Scripts/tmp/file.txt