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

인용 문제가 있습니다:

작은따옴표(''')로 문자를 묶으면 따옴표 안의 각 문자의 리터럴 값이 유지됩니다. 앞에 백슬래시가 있어도 작은따옴표 사이에 작은따옴표를 사용할 수 없습니다.

(에서배쉬 참조 매뉴얼).

당신이해야 할 일은 $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}

관련 정보