ใช้ AWK เพื่อรับคอลัมน์ที่สอง


9

ฉันดูเหมือนจะไม่ได้รับคำสั่ง awk เพื่อรับคอลัมน์ที่สองของข้อมูล

รหัสทุบตี:

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

printf  "$filter_data \n"

ตัวแปร $ filter เป็นค่าของ Download หรือ Upload ที่ถูกส่งเข้าสู่เชลล์สคริปต์ ดังนั้น awk ใช้คำว่า Download หรือ Upload เพื่อค้นหาแถวที่ถูกต้อง

เนื้อหาของไฟล์คือ:

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

ฉันพยายามที่จะได้รับเพียงตัวเลขและไม่ได้อะไรอื่นอดีตและ51.1357.38


2
เหตุใดจึงบันทึกเป็นตัวแปรหากคุณพิมพ์ทันที เพียงใช้awk'sprintf
Sergiy Kolodyazhnyy

คำตอบ:


13

คุณต้องใช้เครื่องหมายคำพูดเดี่ยวสำหรับเนื้อหาโปรแกรม awk ดังนั้นตัวแปรของ awk จะไม่ถูกขยายโดยเชลล์ นี่คือวิธีที่คุณควรส่งตัวแปร shell ไปยัง awk:

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

7

ทางเลือกอื่นคือให้เชลล์ใส่ตัวแปรเข้าไปในawkสภาพแวดล้อมผ่านการดำเนินการมอบหมาย (ชั่วคราว):

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

โปรดทราบว่าการอ้างตัวแปรไม่จำเป็นเมื่อทำการมอบหมายในเชลล์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.