ประมวลผลข้อความด้วย Bash: ใช้คำสั่ง grep, sed และ awk
เรียนรู้วิธีจัดการและกรองข้อมูลล็อกไฟล์ผ่าน Bash สคริปต์ด้วยเครื่องมือทรงพลังอย่าง grep, sed และ awk พร้อมตัวอย่างการใช้งานจริง

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
- ใช้ grep เพื่อค้นหาแพตเทิร์นและข้อความที่ต้องการในไฟล์ล็อก
- ใช้ awk สำหรับวิเคราะห์โครงสร้างข้อมูลและแยกคอลัมน์
- ใช้ sed เพื่อค้นหา แก้ไข และแทนที่ข้อความในสตรีมข้อมูล
- รวมพลังทั้งสามคำสั่งผ่านไปป์ไลน์ (pipes) เพื่อสร้างสคริปต์ขั้นสูง
การประมวลผลข้อความใน Bash ด้วยคำสั่ง grep, sed และ awk ถือเป็นทักษะสำคัญสำหรับผู้ดูแลระบบและนักพัฒนา ช่วยให้สามารถกรองและจัดการข้อมูลอินพุตเพื่อทำภารกิจเฉพาะเจาะจงได้ เช่น การค้นหาล็อกไฟล์ การแปลงเนื้อหา และการดึงข้อมูลที่มีโครงสร้าง โดยคุณสามารถผสมผสานคำสั่งเหล่านี้เข้ากับลูป เงื่อนไข และนิพจน์ต่างๆ เพื่อการประมวลผลที่ซับซ้อนยิ่งขึ้น บทความนี้จะพาทุกท่านไปทำความรู้จักเครื่องมือแต่ละตัวทีละขั้นตอน ก่อนจะแสดงวิธีนำมารวมกันในสคริปต์จริง
ขั้นตอนแรกเริ่มต้นด้วยการสร้างไฟล์ log.txt เพื่อเก็บข้อมูลข้อความหลายบรรทัด โดยใช้โปรแกรมแก้ไขข้อความ nano และใส่ข้อมูลตัวอย่างชุดล็อกเหตุการณ์ เช่น วันที่ 2024-10-25 เวลา 08:15:23 ระดับ INFO เรื่องการเปิดใช้งาน Apache Web Server สำเร็จ ไปจนถึงข้อผิดพลาดในระดับ ERROR และ WARNING ต่างๆ จากนั้นสร้างสคริปต์ processing.sh เพื่อโหลดไฟล์ล็อกดังกล่าวเก็บไว้ในตัวแปร LOG สำหรับนำไปประมวลผลต่อในขั้นตอนถัดไป
เครื่องมือตัวแรกคือ grep ซึ่งทำหน้าที่ค้นหาแพตเทิร์นข้อความเฉพาะในไฟล์ โดยการเพิ่มคำสั่ง grep -i "ERROR" "$LOG" จะช่วยค้นหาคำว่า ERROR แบบไม่สนใจตัวพิมพ์เล็กพิมพ์ใหญ่ในไฟล์ log.txt และแสดงผลลัพธ์ที่ตรงกันทั้งหมดออกมา ตัวอย่างผลลัพธ์จะแสดงรายการข้อผิดพลาด เช่น ปัญหาการเชื่อมต่อฐานข้อมูลบนพอร์ต 3306 หรือไฟล์ www.yml ที่หาไม่พบ
ต่อมาคือการใช้คำสั่ง awk เพื่อวิเคราะห์ข้อมูลที่มีโครงสร้างและค้นหาแพตเทิร์นเฉพาะ โดยตัวอย่างคำสั่ง awk '{print $1, $3}' "$LOG" จะทำหน้าที่พิมพ์คอลัมน์ที่ 1 และ 3 ออกมา เพื่อแสดงผลวันที่และระดับของล็อก เช่น 2024-10-25 INFO: และ 2024-10-25 ERROR: ช่วยให้สามารถจัดระเบียบและเลือกแสดงเฉพาะข้อมูลคอลัมน์ที่ต้องการได้อย่างรวดเร็ว
การใช้งาน grep, sed และ awk ร่วมกันผ่านไปป์ไลน์ (|) เปรียบเสมือนการสร้างสายพานการผลิตข้อมูล โดยผลลัพธ์จากคำสั่งแรกจะถูกส่งต่อเป็นอินพุตให้กับคำสั่งถัดไปทันทีโดยไม่ต้องเขียนไฟล์ชั่วคราว แนวคิดนี้เป็นหัวใจสำคัญของปรัชญา Unix ที่เน้นให้เครื่องมือขนาดเล็กทำหน้าที่เฉพาะตัวให้ดีที่สุด แล้วนำมาประกอบกันเป็นงานที่ซับซ้อนได้
ในส่วนของคำสั่ง sed หรือ Stream Editor ทำหน้าที่ในการค้นหา แก้ไข และแทนที่เนื้อหา ตัวอย่างเช่นคำสั่ง sed -e 's/ERROR/New ERROR/gI' -e 's/WARNING/New WARNING/gI' "$LOG" จะทำการแทนที่คำว่า ERROR ด้วย New ERROR และคำว่า WARNING ด้วย New WARNING ทั่วทั้งไฟล์ล็อก ช่วยให้การแปลงรูปแบบข้อความจำนวนมากทำได้โดยอัตโนมัติ
ท้ายที่สุด คุณสามารถนำคำสั่งทั้งสามมารวมพลังกันในสคริปต์ combine.sh โดยใช้เครื่องหมายไปป์ไลน์ (|) เพื่อส่งต่อข้อมูลจาก grep ไปยัง sed และ awk ตามลำดับ ผลลัพธ์ที่ได้คือรายงานล็อกไฟล์ที่มีการกรองข้อความเฉพาะ ERROR และ WARNING พร้อมทั้งแปลงข้อความและจัดรูปแบบคอลัมน์ให้อ่านง่ายได้อย่างมีประสิทธิภาพ
ที่มา: Dev.to
พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้
ความคิดเห็น
แสดงความคิดเห็น