Utilisation d'AWK pour obtenir la deuxième colonne

9

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 passée dans le script shell. Ainsi, 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 seulement les chiffres et rien d'autre, ex 51.13et 57.38.

Vlad
la source
2
Pourquoi l'enregistrer en variable si vous l'imprimez tout de suite? Utilisez simplement awk'sprintf
Sergiy Kolodyazhnyy

Réponses:

13

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 passer une variable shell dans awk:

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

Une autre méthode consiste à laisser le shell mettre des variables dans l' awkenvironnement s via une affectation de procédure (temporaire):

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

Notez que la citation de variable n'est pas nécessaire lors de l'exécution des affectations dans le shell

Sergiy Kolodyazhnyy
la source