Menggunakan AWK untuk mendapatkan kolom kedua

9

Saya sepertinya tidak bisa mendapatkan perintah awk untuk mendapatkan kolom data kedua.

Kode Bash:

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

printf  "$filter_data \n"

Variabel $ filter adalah nilai Unduh atau Unggah yang diteruskan ke skrip shell. Jadi awk menggunakan istilah Unduh atau Unggah untuk mencari baris yang tepat.

Isi file adalah:

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

Saya mencoba mendapatkan hanya angka dan bukan yang lain, ex, 51.13dan 57.38.

Vlad
sumber
2
Mengapa menyimpannya ke variabel jika Anda mencetaknya segera? Cukup gunakan awk'sprintf
Sergiy Kolodyazhnyy

Jawaban:

13

Anda perlu menggunakan tanda kutip tunggal untuk badan program awk sehingga variabel awk tidak diperluas oleh shell. Inilah cara Anda harus meneruskan variabel shell ke awk:

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

Cara alternatif adalah membiarkan shell memasukkan variabel ke awklingkungan melalui penugasan yang dilanjutkan (sementara):

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

Perhatikan bahwa mengutip variabel tidak diperlukan saat melakukan tugas di shell

Sergiy Kolodyazhnyy
sumber