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

วิธีอ่าน Awk Input จาก STDIN ใน Linux - ตอนที่ 7


ในส่วนก่อนหน้าของชุดเครื่องมือ Awk เราพิจารณาการอ่านอินพุตจากไฟล์เป็นส่วนใหญ่ แต่ถ้าคุณต้องการอ่านอินพุตจาก STDIN ล่ะ

ในส่วนที่ 7 ของซีรีส์ Awk นี้ เราจะดูตัวอย่างบางส่วนที่คุณสามารถกรองเอาต์พุตของคำสั่งอื่นแทนการอ่านอินพุตจากไฟล์ได้

เราจะเริ่มต้นด้วยยูทิลิตี้ dir ที่ทำงานคล้ายกับคำสั่ง ls ในตัวอย่างแรกด้านล่าง เราใช้เอาต์พุตของคำสั่ง dir -l เป็นอินพุตสำหรับ Awk เพื่อพิมพ์ชื่อผู้ใช้ ชื่อกลุ่ม และไฟล์ของเจ้าของที่เขา /she เป็นเจ้าของในไดเร็กทอรีปัจจุบัน:

dir -l | awk '{print $3, $4, $9;}'

ดูอีกตัวอย่างหนึ่งที่เราใช้นิพจน์ awk ในที่นี้ เราต้องการพิมพ์ไฟล์ที่เป็นของผู้ใช้ root โดยใช้นิพจน์เพื่อกรองสตริงเช่นเดียวกับในคำสั่ง awk ด้านล่าง:

dir -l | awk '$3=="root" {print $1,$3,$4, $9;} '

คำสั่งด้านบนมีตัวดำเนินการเปรียบเทียบ (==) เพื่อช่วยเรากรองไฟล์ในไดเร็กทอรีปัจจุบันที่เป็นของผู้ใช้รูท สามารถทำได้โดยใช้นิพจน์ $3== ”root ”

ให้เราดูอีกตัวอย่างหนึ่งที่เราใช้ตัวดำเนินการเปรียบเทียบ awk เพื่อจับคู่สตริงบางตัว

ที่นี่ เราได้ใช้ยูทิลิตี้ cat เพื่อดูเนื้อหาของไฟล์ชื่อ tecmint_deals.txt และเราต้องการดูข้อเสนอประเภท เทคโนโลยี เท่านั้น ดังนั้นเราจะเรียกใช้ คำสั่งต่อไปนี้:

cat tecmint_deals.txt
cat tecmint_deals.txt | awk '$4 ~ /tech/{print}'
cat tecmint_deals.txt | awk '$4 ~ /Tech/{print}'

ในตัวอย่างด้านบน เราได้ใช้ตัวดำเนินการเปรียบเทียบค่า ~ /pattern/ แต่มีสองคำสั่งให้ลองดึงสิ่งที่สำคัญมากออกมา

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

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

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

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