將變數傳遞給 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}

相關內容