โดยทั่วไปแล้วยิ่งมีเครื่องมือเฉพาะมากเท่าใดก็ยิ่งเร็วเท่านั้น ดังนั้นในกรณีส่วนใหญ่คุณสามารถคาดหวังcut
และgrep
จะเร็วกว่าsed
และจะเร็วกว่าsed
awk
หากคุณกำลังเปรียบเทียบท่อที่ยาวกว่าของเครื่องมือที่ง่ายกว่าด้วยการเรียกใช้เครื่องมือที่ซับซ้อนมากขึ้นเพียงครั้งเดียวก็ไม่มีกฎง่ายๆ เรื่องนี้มีความสำคัญกับอินพุตขนาดใหญ่ (พูดหลายล้านบรรทัด); สำหรับอินพุตสั้นคุณจะไม่เห็นความแตกต่าง
ข้อดีของเครื่องมือที่ซับซ้อนกว่าคือแน่นอนว่าพวกเขาสามารถทำสิ่งต่าง ๆ ได้มากขึ้น
คำสั่งของคุณใช้แมวโดยไม่จำเป็น ใช้การเปลี่ยนเส้นทางแทน (โดยเฉพาะอย่างยิ่งถ้าคุณกังวลเรื่องความเร็วแม้ว่าคุณอาจไม่ควรกังวลเกี่ยวกับความเร็วจนกว่าคุณจะรันการวัดประสิทธิภาพ¹)
<fileName awk '/WORD/ { print $2 }'
<fileName grep WORD | cut -f 2 -d ' '
คำสั่งเหล่านี้เกือบเทียบเท่า ความแตกต่างคือ:
- awk และ grep มีไวยากรณ์ regexp ที่แตกต่างกัน Awk และ
grep -E
มีซินแท็กซ์ regexp เกือบเหมือนกัน (นิพจน์ทั่วไปที่ขยายเพิ่ม)
cut -d ' '
ปฏิบัติต่ออักขระช่องว่างแต่ละรายการเป็นตัวคั่น ตัวคั่นเริ่มต้นของ Awk คือลำดับช่องว่างใด ๆ ซึ่งอาจเป็นช่องว่างหลาย ๆ แท็บ ฯลฯ คุณไม่สามารถใช้ลำดับช่องว่างตามอำเภอใจเป็นตัวคั่นcut
ได้ การใช้ช่องว่างของแต่ละบุคคลเป็นตัวคั่นใน awk ตั้งคั่นฟิลด์ regexp ที่ตรงกับพื้นที่เดียว, อื่น ๆ กว่า regexp ประกอบด้วยพื้นที่เดียว (ซึ่งเป็นกรณีพิเศษหมายถึง“ลำดับช่องว่างใด ๆ” คือเริ่มต้น) awk -F '[ ]' '/WORD/ {print $2}'
A:
¹ กฎข้อแรกของการเพิ่มประสิทธิภาพโปรแกรม: อย่าทำ กฎข้อที่สองของการเพิ่มประสิทธิภาพโปรแกรม (สำหรับผู้เชี่ยวชาญเท่านั้น!): อย่าทำเลย - Michael A. Jackson
echo filename
หรือcat filename
?