วิธีใช้นิพจน์ผสมกับ Awk ใน Linux - ตอนที่ 5
ตลอดมา เราได้ดูนิพจน์ง่ายๆ เมื่อตรวจสอบว่าตรงตามเงื่อนไขหรือไม่ จะเป็นอย่างไรถ้าคุณต้องการใช้มากกว่าหนึ่งนิพจน์เพื่อตรวจสอบเงื่อนไขเฉพาะ
ในบทความนี้ เราจะมาดูวิธีที่คุณสามารถรวมนิพจน์หลายรายการที่เรียกว่านิพจน์ผสมเพื่อตรวจสอบเงื่อนไขเมื่อกรองข้อความหรือสตริง
ใน Awk นิพจน์ผสม ถูกสร้างขึ้นโดยใช้ &&
เรียกว่า (และ)
และ | |
เรียกว่า (or)
ตัวดำเนินการผสม
ไวยากรณ์ทั่วไปสำหรับนิพจน์ผสมคือ:
( first_expression ) && ( second_expression )
ในที่นี้ first_expression
และ second_expression
จะต้องเป็นจริงเพื่อทำให้นิพจน์ทั้งหมดเป็นจริง
( first_expression ) || ( second_expression)
ในที่นี้ หนึ่งในนิพจน์ first_expression
หรือ second_expression
จะต้องเป็นจริงเพื่อให้นิพจน์ทั้งหมดเป็นจริง
ข้อควรระวัง: อย่าลืมใส่วงเล็บเสมอ
คุณสามารถสร้างนิพจน์ได้โดยใช้ตัวดำเนินการเปรียบเทียบที่เราดูในส่วนที่ 4 ของซีรีส์ awk
ตอนนี้ให้เราทำความเข้าใจให้ชัดเจนโดยใช้ตัวอย่างด้านล่าง:
ในตัวอย่างนี้ มีไฟล์ข้อความชื่อ tecmint_deals.txt
ซึ่งมีรายการข้อเสนอแบบสุ่มที่น่าทึ่งของ Tecmint รวมถึงชื่อของข้อตกลง ราคา และประเภท
No Name Price Type
1 Mac_OS_X_Cleanup_Suite $9.99 Software
2 Basics_Notebook $14.99 Lifestyle
3 Tactical_Pen $25.99 Lifestyle
4 Scapple $19.00 Unknown
5 Nano_Tool_Pack $11.99 Unknown
6 Ditto_Bluetooth_Altering_Device $33.00 Tech
7 Nano_Prowler_Mini_Drone $36.99 Tech
สมมติว่าเราต้องการเฉพาะข้อเสนอการพิมพ์และทำเครื่องหมายที่มีมูลค่ามากกว่า $20 และเป็นประเภท “เทคโนโลยี ” โดยใช้เครื่องหมาย (**)
ที่ส่วนท้าย ของแต่ละบรรทัด
เราจะต้องรันคำสั่งด้านล่าง
# awk '($3 ~ /^$[2-9][0-9]*\.[0-9][0-9]$/) && ($4=="Tech") { printf "%s\t%s\n",$0,"*"; } ' tecmint_deals.txt
6 Ditto_Bluetooth_Altering_Device $33.00 Tech *
7 Nano_Prowler_Mini_Drone $36.99 Tech *
ในตัวอย่างนี้ เราได้ใช้สองนิพจน์ในนิพจน์ผสม:
- นิพจน์แรก ($3 ~ /^\$[2-9][0-9]*\.[0-9][0-9]$/) ; ตรวจสอบบรรทัดที่มีข้อตกลงที่มีราคาสูงกว่า $20 และมันจะเป็นจริงก็ต่อเมื่อค่าของ $3 ซึ่งเป็นราคาตรงกับรูปแบบ /^\$[ 2-9][0-9]*\.[0-9][0-9]$/
- และสำนวนที่สอง ($4 == “Tech”) ; ตรวจสอบว่าข้อตกลงนั้นเป็นประเภท “เทคโนโลยี ” หรือไม่ และมันจะเป็นจริงก็ต่อเมื่อมูลค่า $4 เท่ากับ “เทคโนโลยี ”
โปรดจำไว้ว่า บรรทัดจะถูกทำเครื่องหมายด้วย (**)
เท่านั้น หาก นิพจน์แรก และ นิพจน์ที่สอง เป็นจริงตามที่ระบุไว้ในหลักการของ ตัวดำเนินการ &&
สรุป
เงื่อนไขบางประการจำเป็นต้องสร้างนิพจน์ผสมเสมอเพื่อให้ตรงกับสิ่งที่คุณต้องการ เมื่อคุณเข้าใจการใช้ตัวดำเนินการเปรียบเทียบและนิพจน์ผสม การกรองข้อความหรือสตริงตามเงื่อนไขที่ยากลำบากจะกลายเป็นเรื่องง่าย
หวังว่าคู่มือนี้มีประโยชน์ และสำหรับคำถามหรือข้อมูลเพิ่มเติม โปรดอย่าลืมแสดงความคิดเห็นเสมอ แล้วข้อกังวลของคุณจะได้รับการแก้ไขตามนั้น