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

วิธีอนุญาตให้ Awk ใช้ตัวแปรเชลล์ - ตอนที่ 11


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

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

คุณสามารถเปิดใช้งาน Awk เพื่อใช้ตัวแปรเชลล์ได้สองวิธี:

1. การใช้การอ้างอิงเชลล์

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

ดังนั้นเราจึงสามารถเขียนสคริปต์ test.sh โดยมีเนื้อหาดังต่อไปนี้:

#!/bin/bash

#read user input
read -p "Please enter username:" username

#search for username in /etc/passwd file and print details on the screen
cat /etc/passwd | awk "/$username/ "' { print $0 }'

หลังจากนั้นให้บันทึกไฟล์และออก

การตีความคำสั่ง Awk ในสคริปต์ test.sh ด้านบน:

cat /etc/passwd | awk "/$username/ "' { print $0 }'

"/$username/ " – การอ้างอิงเชลล์ใช้เพื่อทดแทนค่าของตัวแปรเชลล์ ชื่อผู้ใช้ ในคำสั่ง Awk ค่าของ ชื่อผู้ใช้ คือรูปแบบที่จะค้นหาในไฟล์ /etc/passwd

โปรดทราบว่าเครื่องหมายคำพูดคู่อยู่นอกสคริปต์ Awk '{ print $0 }'

จากนั้นทำให้สคริปต์ปฏิบัติการได้และรันดังนี้:

chmod  +x  test.sh
./text.sh 

หลังจากเรียกใช้สคริปต์ คุณจะได้รับแจ้งให้ป้อน ชื่อผู้ใช้ พิมพ์ ชื่อผู้ใช้ ที่ถูกต้อง และกด Enter คุณจะดูรายละเอียดบัญชีของผู้ใช้จากไฟล์ /etc/passwd ดังต่อไปนี้:

2. การใช้การกำหนดตัวแปรของ Awk

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

ขั้นแรก สร้างตัวแปรเชลล์ ชื่อผู้ใช้ และกำหนดชื่อที่เราต้องการค้นหาในไฟล์ /etc/passswd:

username="aaronkilik"

จากนั้นพิมพ์คำสั่งด้านล่างแล้วกด Enter:

cat /etc/passwd | awk -v name="$username" ' $0 ~ name {print $0}'

คำอธิบายของคำสั่งข้างต้น:

  1. -v – ตัวเลือก Awk เพื่อประกาศตัวแปร
  2. ชื่อผู้ใช้ – คือตัวแปรเชลล์
  3. name – คือตัวแปร Awk

ให้เราพิจารณา $0 ~ name ภายในสคริปต์ Awk อย่างละเอียด ' $0 ~ name {print $0}' โปรดจำไว้ว่า เมื่อเรากล่าวถึงตัวดำเนินการเปรียบเทียบ Awk ในส่วนที่ 4 ของชุดนี้ ตัวดำเนินการเปรียบเทียบตัวหนึ่งคือรูปแบบค่า ~ ซึ่งหมายความว่า: จริงหากค่าตรงกับรูปแบบ

output($0) ของคำสั่ง cat ที่ไปป์ที่ Awk ตรงกับรูปแบบ (aaronkilik) ซึ่งเป็นชื่อที่เรากำลังค้นหาใน /etc/passwd เป็นผลให้การดำเนินการเปรียบเทียบเป็นจริง จากนั้นบรรทัดที่มีข้อมูลบัญชีของผู้ใช้จะถูกพิมพ์บนหน้าจอ

บทสรุป

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

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