ค้นหาเว็บไซต์

วิธีใช้นิพจน์ผสมกับ 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	 *

ในตัวอย่างนี้ เราได้ใช้สองนิพจน์ในนิพจน์ผสม:

  1. นิพจน์แรก ($3 ~ /^\$[2-9][0-9]*\.[0-9][0-9]$/) ; ตรวจสอบบรรทัดที่มีข้อตกลงที่มีราคาสูงกว่า $20 และมันจะเป็นจริงก็ต่อเมื่อค่าของ $3 ซึ่งเป็นราคาตรงกับรูปแบบ /^\$[ 2-9][0-9]*\.[0-9][0-9]$/
  2. และสำนวนที่สอง ($4 == “Tech”) ; ตรวจสอบว่าข้อตกลงนั้นเป็นประเภท “เทคโนโลยี ” หรือไม่ และมันจะเป็นจริงก็ต่อเมื่อมูลค่า $4 เท่ากับ “เทคโนโลยี ”

โปรดจำไว้ว่า บรรทัดจะถูกทำเครื่องหมายด้วย (**) เท่านั้น หาก นิพจน์แรก และ นิพจน์ที่สอง เป็นจริงตามที่ระบุไว้ในหลักการของ ตัวดำเนินการ &&

สรุป

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

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