![Pasar variable a Linux 'awk'](https://rvso.com/image/747367/Pasar%20variable%20a%20Linux%20'awk'.png)
¿Cómo puedo pasar una variable previamente definida a awk en bash? Por ejemplo,
hostname="server1" cat /etc/passwd | awk -F":" '{print $1 " of $hostname"}
Y el resultado esperado es
root of server1
sys of server1
......
...... // for all user accounts
Pero lo que obtengo es
root of $hostname
sys of $hostname
Respuesta1
Tienes un problema de cotización:
Al incluir caracteres entre comillas simples ('''), se conserva el valor literal de cada carácter entre comillas. No puede aparecer una comilla simple entre comillas simples, incluso si van precedidas de una barra invertida.
(deManual de referencia de bash).
Todo lo que necesitas hacer es colocar $hostname
fuera de las comillas simples:
cat /etc/passwd | awk -F":" '{print $1 " of '$hostname'"}'
o utilice comillas dobles y escape algunos caracteres con \
:
cat /etc/passwd | awk -F":" "{print \$1 \" of $hostname\"}"
Respuesta2
awk
tiene una opción variable incorporada con -v
.
cat /etc/passwd | awk -F":" -v hostname="server1" '{print $1 " of " hostname}