Utilizzo di AWK per ottenere la seconda colonna


9

Non riesco a ottenere il comando awk per ottenere la seconda colonna di dati.

Codice Bash:

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

printf  "$filter_data \n"

La variabile $ filter è il valore di Download o Upload che viene passato nello script della shell. Quindi awk usa il termine Download o Upload per cercare la riga corretta.

I contenuti del file sono:

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

Sto cercando di ottenere solo i numeri e non altro, ex 51.13e 57.38.


2
Perché salvarlo su variabile se lo stai stampando subito? Usa awk'sprintf
Sergiy Kolodyazhnyy il

Risposte:


13

È necessario utilizzare virgolette singole per il corpo del programma awk in modo che le variabili di awk non vengano espanse dalla shell. Ecco come dovresti passare una variabile di shell in awk:

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

7

Un modo alternativo è lasciare che la shell metta la variabile in un awkambiente tramite assegnazione procedurale (temporanea):

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

Si noti che la quotazione delle variabili non è necessaria quando si eseguono compiti nella shell

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.