Передать переменную в Linux 'awk'

Передать переменную в Linux 'awk'

Как передать ранее определенную переменную в awk в bash? Например,

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}

Связанный контент