
Ich verwende die folgende awk-Zeile, um den Remote-Computer zu erfassen, der den Port 2181 verwendet
netstat -nape | awk '{if ($4 == "43.64.56.36:2181") print $4, $5 ,$6 ,$9;}'
43.64.56.36:2181 43.64.56.60:40151 ESTABLISHED 9027/java
aber wenn ich den Parameter - a verwende, der den IP-Adresswert im awk darstellt, scheint es, dass ein Parameter nicht die echte IP-Adresse erhält
netstat -nape | awk -v a="43.64.56.36" '{if ($4 == a:2181) print $4, $5 ,$6 ,$9;}'
keine Leistung
wenn ich hier falsch liege?
Antwort1
Ihr Befehl sollte einen Syntaxfehler ausgegeben haben.
Mit GNU awk
:
awk: cmd. line:1: {if ($4 == a:2181) print $4, $5 ,$6 ,$9;}
awk: cmd. line:1: ^ syntax error
Mit BSD awk
:
awk: syntax error at source line 1
context is
{if ($4 == >>> a: <<<
awk: illegal statement at source line 1
Mit mawk
:
mawk: line 1: syntax error at or near :
Alle diese weisen auf den Syntaxfehler bei hin a:2181
.
Sie legen die awk
Variable korrekt a
auf einen String fest, der Ihre IP-Nummer enthält. Wenn Sie deren Wert jedoch zu einem neuen String verketten möchten, :2181
müssen Sie :2181
als String Folgendes verwenden: a ":2181"
Sie sollten auch erwägen, die idiomatische Methode zum Abgleichen der Eingabe und Ausführen einer Aktion zu verwenden, anstatt explizite if
Anweisungen zu verwenden:
awk -a="42.54.56.36" '$4 == a ":2181" { print $4, $5, $6, $9 }'
;
Beachten Sie, dass eine Anweisung nicht mit „ in“ beendet werden muss, awk
wenn sich in der gleichen Zeile keine weiteren Anweisungen befinden.
Antwort2
Wir haben es mit der folgenden Syntax gelöst
netstat -nape | awk -v a="43.64.56.36" '{if ($4 == a":2181") print $4, $5 ,$6 ,$9;}'