İkinci sütunu almak için AWK kullanma


9

Verilerin ikinci sütununu almak için awk komutunu alamıyorum.

Bash Kodu:

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

printf  "$filter_data \n"

$ Filter değişkeni, kabuk betiğine geçirilen Download veya Upload değeridir. Awk, uygun satırı aramak için İndir veya Yükle terimini kullanır.

Dosya içeriği:

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

Başka bir şey değil, sadece sayıları almaya çalışıyorum, eski 51.13ve 57.38.


2
Hemen yazdırıyorsanız, neden değişkene kaydetmelisiniz? Sadece kullanın awk'sprintf
Sergiy Kolodyazhnyy

Yanıtlar:


13

Awk program gövdesi için tek tırnak kullanmanız gerekir, böylece awk değişkenleri kabuk tarafından genişletilmez. Bir kabuk değişkenini awk'ye nasıl geçirmeniz gerektiği aşağıda açıklanmıştır:

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

7

Alternatif yol, awkatamaya devam ederek kabuğun değişkenini ortamına koymasına izin vermektir (geçici):

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

Kabukta atamalar yapılırken değişken alıntılamanın gerekli olmadığını unutmayın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.