Usando o AWK para obter a segunda coluna

9

Não consigo obter o comando awk para obter a segunda coluna de dados.

Código Bash:

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

printf  "$filter_data \n"

A variável $ filter é o valor de Download ou Upload que é passado para o script de shell. O awk usa o termo Download ou Upload para procurar a linha correta.

O conteúdo do arquivo é:

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

Estou tentando obter apenas os números e nada mais, ex 51.13e 57.38.

Vlad
fonte
2
Por que salvá-lo na variável se você estiver imprimindo imediatamente? Basta usar awk'sprintf
Sergiy Kolodyazhnyy 12/12

Respostas:

13

Você precisa usar aspas simples para o corpo do programa awk, para que as variáveis ​​do awk não sejam expandidas pelo shell. Aqui está como você deve passar uma variável de shell para o awk:

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

Uma maneira alternativa é permitir que o shell coloque variáveis ​​no awkambiente através da atribuição de procedimento (temporário):

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

Observe que a citação de variáveis ​​não é necessária ao executar atribuições no shell

Sergiy Kolodyazhnyy
fonte