将变量传递给 Linux ‘awk’

将变量传递给 Linux ‘awk’

如何在 bash 中将先前定义的变量传递给 awk?例如,

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

预期输出为

root of server1
sys of server1
......
......  // for all user accounts

但我得到的是

root of $hostname
sys of $hostname

答案1

您有一个引用问题:

将字符括在单引号 (''') 中可保留引号内每个字符的字面值。单引号之间不能出现单引号,即使前面有反斜杠。

(从Bash 参考手册)。

您需要做的就是将其放在$hostname单引号外面:

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

或者使用双引号并使用以下方式转义某些字符\

cat /etc/passwd | awk -F":" "{print \$1 \" of $hostname\"}"

答案2

awk有一个内置变量选项-v

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

相关内容