it-swarm.com.de

Verwenden von AWK, um die zweite Spalte abzurufen

Ich kann nicht scheinen, den awk Befehl zu erhalten, um die zweite Spalte der Daten zu erhalten.

Bash Code:

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

printf  "$filter_data \n"

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

Die Dateiinhalte sind:

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

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

9
Vlad

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

filter_data=$( awk -v re="$filter:" '$0 ~ re {print $2}' scanresults_temp.txt )
13
glenn jackman

Eine andere Möglichkeit besteht darin, Shell die Variable über eine fortlaufende Zuweisung (temporär) in die Umgebung von awk setzen zu lassen:

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

Beachten Sie, dass bei der Ausführung von Zuweisungen in Shell keine variablen Anführungszeichen erforderlich sind

7