Usando AWK para obtener la segunda columna

9

Parece que no puedo obtener el comando awk para obtener la segunda columna de datos.

Código Bash:

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

printf  "$filter_data \n"

La variable $ filter es el valor de Descarga o Carga que se pasa al script de shell. Así que awk usa el término Descargar o Cargar para buscar la fila adecuada.

Los contenidos del archivo son:

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

Estoy tratando de obtener solo los números y no otra cosa, por ejemplo, 51.13y 57.38.

Vlad
fuente
2
¿Por qué guardarlo en variable si lo está imprimiendo de inmediato? Solo use awk'sprintf
Sergiy Kolodyazhnyy

Respuestas:

13

Debe utilizar comillas simples para el cuerpo del programa awk para que el shell no expanda las variables de awk. Así es como debe pasar una variable de shell a awk:

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

Una forma alternativa es dejar que Shell ponga variables en awkel entorno de s mediante la asignación de procedimiento (temporal):

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

Tenga en cuenta que las comillas variables no son necesarias al realizar asignaciones en shell

Sergiy Kolodyazhnyy
fuente