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}

関連情報