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.


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 )

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.