web-dev-qa-db-fra.com

Utiliser AWK pour obtenir la deuxième colonne

Je n'arrive pas à obtenir la commande awk pour obtenir la deuxième colonne de données.

Code Bash:

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

printf  "$filter_data \n"

La variable $ filter est la valeur de Download ou Upload qui est transmise au script Shell. Donc, awk utilise le terme Télécharger ou Télécharger pour rechercher la ligne appropriée.

Le contenu du fichier est:

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

J'essaie d'obtenir uniquement les chiffres et rien d'autre, par exemple, 51.13 et 57.38.

9
Vlad

Vous devez utiliser des guillemets simples pour le corps du programme awk afin que les variables de awk ne soient pas développées par le shell. Voici comment vous devriez passer une variable Shell dans awk:

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

Une autre façon de faire consiste à laisser Shell mettre la variable dans l'environnement awks via une affectation continue (temporaire):

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

Notez que les guillemets variables ne sont pas nécessaires lorsque vous effectuez des affectations dans Shell

7
Sergiy Kolodyazhnyy