
Me pidieron que escribiera un comando que agregue la enésima línea ( MYN
) de un archivo ( x
) a otro archivo ( y
). Esto es lo que he hecho hasta ahora:
MYN=4
hey=$(awk 'NR==$MYN' x)
echo "$hey" >> y
¿Pero por qué esto no funciona?
Respuesta1
Si su objetivo es pasar una variable para awk
usarla dentro del script, puede usar awk
la -v
opción:
hey=$(awk -v MYN=$MYN 'NR==MYN' x)
Respuesta2
Veo tu problema, estás usando comillas simples. No permitirán que la variable Bash $MYN
se expanda. Puedes complicar las cosas indicando awk
una nueva variable o, como es tan simple, puedes simplemente cambiar a comillas dobles:
awk "NR==$MYN" x
Tendríausadosed
pero no veo ningún problema obvio con tu lógica
MYN=4
sed "${MYN}q;d" x >> y
Parece funcionar como se esperaba:
$ for i in $(seq 1 10); do echo $i >> x; done
$ sed "${MYN}q;d" x
4