O motivo pelo qual isso não funciona da maneira como você escreveu é que awk
interpretará $i
como "o i
th field" e, como a awk
variable i
não tem valor, você receberá um erro ou, se você estiver usando o GNU awk
ou mawk
, $i
será o mesmo que $0
, que é a linha inteira (com mawk
ou GNU awk
, o programa parece para linhas cuja primeira coluna é igual à linha inteira).
Em vez disso, para "importar" a variável shell para awk
:
awk -v i="$i" '$1 == i { sum += $4 } END { print sum }' test2.txt
Além disso, o valor da variável de shell $i
sempre será o nome do arquivo test1.txt
(já que é isso que você faz o loop).
Para percorrer o conteúdo do arquivo:
while IFS= read -r i; do
awk ...as above...
done <test1.txt
A resposta da αғsнιη mostra como você pode fazer isso sem usar um loop de shell.