Passar variável para Linux 'awk'

Passar variável para Linux 'awk'

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 $hostnamefora 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

awktem uma opção de variável integrada com -v.

cat /etc/passwd | awk -F":" -v hostname="server1" '{print $1 " of " hostname}

informação relacionada