Как передать ранее определенную переменную в 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}