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

วิธีใช้ตัวดำเนินการเปรียบเทียบกับ Awk ใน Linux - ตอนที่ 4


เมื่อต้องจัดการกับค่าตัวเลขหรือสตริงในบรรทัดข้อความ การกรองข้อความหรือสตริงโดยใช้ตัวดำเนินการเปรียบเทียบจะมีประโยชน์สำหรับผู้ใช้คำสั่ง Awk

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

ตัวดำเนินการเปรียบเทียบใน Awk คืออะไร

ตัวดำเนินการเปรียบเทียบใน Awk ใช้เพื่อเปรียบเทียบค่าของตัวเลขหรือสตริง โดยมีดังต่อไปนี้:

  1. > – มากกว่า
  2. <รหัส>< – น้อยกว่า
  3. >= – มากกว่าหรือเท่ากับ
  4. <= – น้อยกว่าหรือเท่ากับ
  5. == – เท่ากับ
  6. != – ไม่เท่ากับ
  7. some_value ~/pattern/ – เป็นจริงหาก some_value ตรงกับรูปแบบ
  8. some_value !~/pattern/ – เป็นจริงหาก some_value ไม่ตรงกับรูปแบบ

ตอนนี้เราได้ดูตัวดำเนินการเปรียบเทียบต่างๆ ใน Awk แล้ว เรามาทำความเข้าใจกันดีกว่าโดยใช้ตัวอย่าง

ในตัวอย่างนี้ เรามีไฟล์ชื่อ food_list.txt ซึ่งเป็นรายการช็อปปิ้งสำหรับรายการอาหารต่างๆ และฉันต้องการแจ้งรายการอาหารที่มีปริมาณน้อยกว่าหรือเท่ากับ 20 โดยเพิ่ม ( **) ที่ท้ายแต่ละบรรทัด

No      Item_Name               Quantity        Price
1       Mangoes                    45           $3.45
2       Apples                     25           $2.45
3       Pineapples                 5            $4.45
4       Tomatoes                   25           $3.45
5       Onions                     15           $1.45
6       Bananas                    30           $3.45

ไวยากรณ์ทั่วไปสำหรับการใช้ตัวดำเนินการเปรียบเทียบใน Awk คือ:

expression { actions; }

เพื่อให้บรรลุเป้าหมายข้างต้น ฉันจะต้องรันคำสั่งด้านล่าง:

# awk '$3 <= 30 { printf "%s\t%s\n", $0,"**" ; } $3 > 30 { print $0 ;}' food_list.txt

No	Item_Name`		Quantity	Price
1	Mangoes	      		   45		$3.45
2	Apples			   25		$2.45	**
3	Pineapples		   5		$4.45	**
4	Tomatoes		   25		$3.45	**
5	Onions			   15           $1.45	**
6	Bananas			   30           $3.45	**

ในตัวอย่างข้างต้น มีสิ่งสำคัญสองประการที่เกิดขึ้น:

  1. นิพจน์แรก { action ; ชุดค่าผสม, $3 <= 30 { printf “%s\t%s\n”, $0,”**” ; } พิมพ์บรรทัดที่มีปริมาณน้อยกว่าหรือเท่ากับ 30 และเพิ่ม (**) ที่ท้ายแต่ละบรรทัด เข้าถึงค่าของปริมาณได้โดยใช้ตัวแปรฟิลด์ $3
  2. นิพจน์ที่สอง { action ; } ชุดค่าผสม $3 > 30 { print $0 ;} พิมพ์บรรทัดไม่เปลี่ยนแปลงเนื่องจากปริมาณมากกว่า 30

อีกตัวอย่างหนึ่ง:

# awk '$3 <= 20 { printf "%s\t%s\n", $0,"TRUE" ; } $3 > 20  { print $0 ;} ' food_list.txt 

No	Item_Name		Quantity	Price
1	Mangoes			   45		$3.45
2	Apples			   25		$2.45
3	Pineapples		   5		$4.45	TRUE
4	Tomatoes		   25		$3.45
5	Onions			   15           $1.45	TRUE
6       Bananas	                   30           $3.45

ในตัวอย่างนี้ เราต้องการระบุบรรทัดที่มีปริมาณน้อยกว่าหรือเท่ากับ 20 โดยมีคำว่า (TRUE) ต่อท้าย

สรุป

นี่คือบทช่วยสอนเบื้องต้นเกี่ยวกับตัวดำเนินการเปรียบเทียบใน Awk ดังนั้นคุณต้องลองใช้ตัวเลือกอื่นๆ มากมายและค้นพบเพิ่มเติม

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