Como posso passar uma variável definida anteriormente para o awk no bash? Por exemplo,
hostname="server1" cat /etc/passwd | awk -F":" '{print $1 " of $hostname"}
E o resultado esperado é
root of server1
sys of server1
......
...... // for all user accounts
Mas o que eu entendo é
root of $hostname
sys of $hostname
Responder1
Você tem um problema de cotação:
Colocar caracteres entre aspas simples (''') preserva o valor literal de cada caractere entre aspas. Uma aspa simples não pode ocorrer entre aspas simples, mesmo quando precedida por uma barra invertida.
(deManual de referência do Bash).
Tudo que você precisa fazer é colocar $hostname
fora das aspas simples:
cat /etc/passwd | awk -F":" '{print $1 " of '$hostname'"}'
ou use aspas duplas e escape alguns caracteres com \
:
cat /etc/passwd | awk -F":" "{print \$1 \" of $hostname\"}"
Responder2
awk
tem uma opção de variável integrada com -v
.
cat /etc/passwd | awk -F":" -v hostname="server1" '{print $1 " of " hostname}