Se sua meta é passar uma variável para awk
para usá-la no script, use awk
com a opção -v
:
hey=$(awk -v MYN=$MYN 'NR==MYN' x)
Fui solicitado a escrever um comando que acrescenta a n-ésima linha ( MYN
) de um arquivo ( x
) a outro arquivo ( y
). Aqui está o que eu fiz até agora:
MYN=4
hey=$(awk 'NR==$MYN' x)
echo "$hey" >> y
Mas por que isso não funciona?
Se sua meta é passar uma variável para awk
para usá-la no script, use awk
com a opção -v
:
hey=$(awk -v MYN=$MYN 'NR==MYN' x)
Eu vejo seu problema, você está usando aspas simples. Eles não permitirão que a variável de Bash $MYN
se expanda. Você pode complicar as coisas dizendo awk
uma nova variável, ou porque é tão simples, você pode simplesmente mudar para aspas duplas:
awk "NR==$MYN" x
Eu teria usado sed
, mas não vejo problemas óbvios com sua lógica
MYN=4
sed "${MYN}q;d" x >> y
Parece funcionar como esperado:
$ for i in $(seq 1 10); do echo $i >> x; done
$ sed "${MYN}q;d" x
4