Sử dụng AWK để lấy cột thứ hai


9

Tôi dường như không thể có được lệnh awk để lấy cột dữ liệu thứ hai.

Mã Bash:

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

printf  "$filter_data \n"

Biến bộ lọc $ là giá trị Tải xuống hoặc Tải lên được chuyển vào tập lệnh shell. Vì vậy, awk sử dụng thuật ngữ Tải xuống hoặc Tải lên để tìm kiếm hàng thích hợp.

Nội dung tập tin là:

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

Tôi đang cố gắng để có được những con số và không phải bất cứ điều gì khác, ví dụ, 51.1357.38.


2
Tại sao lưu nó vào biến nếu bạn đang in nó ngay lập tức? Chỉ cần sử dụng awk'sprintf
Sergiy Kolodyazhnyy

Câu trả lời:


13

Bạn cần sử dụng dấu ngoặc đơn cho phần thân chương trình awk để các biến của awk không được mở rộng bởi trình bao. Đây là cách bạn nên chuyển một biến shell vào awk:

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

7

Cách khác là để shell đưa biến vào awkmôi trường s thông qua tiến trình gán (tạm thời):

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

Lưu ý rằng trích dẫn biến không cần thiết khi thực hiện các bài tập trong shell

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.