วิธีอนุญาตให้ 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}'
คำอธิบายของคำสั่งข้างต้น:
-v
– ตัวเลือก Awk เพื่อประกาศตัวแปรชื่อผู้ใช้
– คือตัวแปรเชลล์name
– คือตัวแปร Awk
ให้เราพิจารณา $0 ~ name
ภายในสคริปต์ Awk อย่างละเอียด ' $0 ~ name {print $0}'
โปรดจำไว้ว่า เมื่อเรากล่าวถึงตัวดำเนินการเปรียบเทียบ Awk ในส่วนที่ 4 ของชุดนี้ ตัวดำเนินการเปรียบเทียบตัวหนึ่งคือรูปแบบค่า ~
ซึ่งหมายความว่า: จริงหากค่าตรงกับรูปแบบ
output($0)
ของคำสั่ง cat ที่ไปป์ที่ Awk ตรงกับรูปแบบ (aaronkilik)
ซึ่งเป็นชื่อที่เรากำลังค้นหาใน /etc/passwd เป็นผลให้การดำเนินการเปรียบเทียบเป็นจริง จากนั้นบรรทัดที่มีข้อมูลบัญชีของผู้ใช้จะถูกพิมพ์บนหน้าจอ
บทสรุป
เราได้กล่าวถึงส่วนสำคัญของคุณสมบัติ Awk ซึ่งสามารถช่วยให้เราสามารถใช้ตัวแปรเชลล์ภายในคำสั่ง Awk ได้ หลายครั้ง คุณจะต้องเขียนโปรแกรมหรือคำสั่ง Awk ขนาดเล็กภายในเชลล์สคริปต์ ดังนั้น คุณจะต้องมีความเข้าใจที่ชัดเจนเกี่ยวกับวิธีการใช้ตัวแปรเชลล์ภายในคำสั่ง Awk
ในส่วนถัดไปของซีรีส์ Awk เราจะเจาะลึกอีกส่วนสำคัญของฟีเจอร์ Awk นั่นก็คือคำสั่งควบคุมโฟลว์ ดังนั้นคอยติดตามและเรียนรู้และแบ่งปันต่อไป