Verwenden von AWK, um die zweite Spalte zu erhalten

9

Ich kann anscheinend nicht den Befehl awk erhalten, um die zweite Datenspalte abzurufen.

Bash Code:

filter_data=$(awk "{if(/$filter:/) print $2}" < scanresults_temp.txt)

printf  "$filter_data \n"

Die Variable $ filter ist entweder der Wert von Download oder Upload, der an das Shell-Skript übergeben wird. Awk verwendet also den Begriff Download oder Upload, um nach der richtigen Zeile zu suchen.

Der Dateiinhalt ist:

Testing download speed................................................................................
Download: 51.13 Mbit/s
Testing upload speed................................................................................................
Upload: 57.38 Mbit/s

Ich versuche nur die Zahlen zu bekommen und nichts anderes, ex 51.13und 57.38.

Vlad
quelle
2
Warum in Variable speichern, wenn Sie es sofort drucken? Verwenden Sie einfach awk'sprintf
Sergiy Kolodyazhnyy

Antworten:

13

Sie müssen einfache Anführungszeichen für den awk-Programmkörper verwenden, damit die awk-Variablen nicht von der Shell erweitert werden. So sollten Sie eine Shell-Variable an awk übergeben:

filter_data=$( awk -v re="$filter:" '$0 ~ re {print $2}' scanresults_temp.txt )
Glenn Jackman
quelle
7

Eine alternative Möglichkeit besteht darin, die Shell die Variable awküber die fortlaufende Zuweisung (temporär) in die Umgebung einfügen zu lassen :

re=$filter  awk  '$0 ~ ENVIRON["re"] {print $2}'  input.txt

Beachten Sie, dass das Zitieren von Variablen nicht erforderlich ist, wenn Zuweisungen in der Shell ausgeführt werden

Sergiy Kolodyazhnyy
quelle