Übergeben Sie die Variable an Linux „awk“.

Übergeben Sie die Variable an Linux „awk“.

Wie kann ich eine zuvor definierte Variable in Bash an awk übergeben? Zum Beispiel:

hostname="server1" cat /etc/passwd | awk -F":" '{print $1 " of $hostname"}

Und die erwartete Ausgabe ist

root of server1
sys of server1
......
......  // for all user accounts

Aber was ich bekomme ist

root of $hostname
sys of $hostname

Antwort1

Sie haben ein Zitierproblem:

Wenn Sie Zeichen in einfache Anführungszeichen (''') einschließen, bleibt der Literalwert jedes Zeichens innerhalb der Anführungszeichen erhalten. Zwischen einfachen Anführungszeichen darf kein einfaches Anführungszeichen stehen, auch nicht, wenn ein Backslash davor steht.

(ausBash-Referenzhandbuch).

Sie müssen lediglich Folgendes $hostnameaußerhalb der einfachen Anführungszeichen einfügen:

cat /etc/passwd | awk -F":" '{print $1 " of '$hostname'"}'

oder verwenden Sie doppelte Anführungszeichen und maskieren Sie einige Zeichen mit \:

cat /etc/passwd | awk -F":" "{print \$1 \" of $hostname\"}"

Antwort2

awkhat eine eingebaute variable Option mit -v.

cat /etc/passwd | awk -F":" -v hostname="server1" '{print $1 " of " hostname}

verwandte Informationen