Używanie AWK, aby uzyskać drugą kolumnę


9

Nie mogę uzyskać polecenia awk, aby uzyskać drugą kolumnę danych.

Kod Bash:

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

printf  "$filter_data \n"

Zmienna $ filter jest wartością parametru Download lub Upload, która jest przekazywana do skryptu powłoki. Tak więc awk używa terminu Pobierz lub Prześlij, aby wyszukać odpowiedni wiersz.

Zawartość pliku to:

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

Próbuję dostać tylko numery, a nie cokolwiek innego, EX, 51.13oraz 57.38.


2
Po co zapisywać go w zmiennej, jeśli od razu go drukujesz? Wystarczy użyć awk'sprintf
Sergiy Kolodyazhnyy

Odpowiedzi:


13

Musisz użyć pojedynczych cudzysłowów dla treści programu awk, aby zmienne awk nie były rozwijane przez powłokę. Oto jak powinieneś przekazać zmienną powłoki do awk:

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

7

Alternatywnym sposobem jest pozwolenie powłoce na umieszczenie zmiennej w awkśrodowisku s poprzez kontynuowanie przypisania (tymczasowe):

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

Zauważ, że cytowanie zmiennych nie jest konieczne podczas wykonywania przypisań w powłoce

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.