- อะไรคือความแตกต่างระหว่าง awk และ sed?
- แอปพลิเคชั่นประเภทใดบ้างที่ใช้ดีที่สุดสำหรับเครื่องมือ sed และ awk
คำตอบ:
sedเป็นตัวแก้ไขสตรีม มันทำงานร่วมกับกระแสของตัวละครในแต่ละบรรทัด มันมีภาษาการเขียนโปรแกรมดั้งเดิมที่มีการวนรอบแบบ goto และเงื่อนไขแบบง่าย (นอกเหนือจากการจับคู่รูปแบบและการจับคู่ที่อยู่) โดยพื้นฐานแล้วมีเพียง "ตัวแปร" สองตัวเท่านั้น: พื้นที่รูปแบบและพื้นที่พัก การอ่านสคริปต์ได้ยาก การดำเนินการทางคณิตศาสตร์เป็นสิ่งที่ผิดปกติอย่างมาก
มีหลายรุ่นsedพร้อมระดับการสนับสนุนที่แตกต่างกันสำหรับตัวเลือกบรรทัดคำสั่งและคุณสมบัติภาษา
awkถูกวางแนวไปยังเขตข้อมูลที่คั่นด้วยพื้นฐานต่อบรรทัด มันมีประสิทธิภาพมากขึ้นรวมถึงการเขียนโปรแกรมโครงสร้างif/ else, while, do/ whileและfor(C สไตล์และซ้ำอาร์เรย์) มีการสนับสนุนที่สมบูรณ์สำหรับตัวแปรและอาร์เรย์แบบเชื่อมโยงมิติเดียวบวก (IMO) kludgey หลายมิติอาร์เรย์ การดำเนินการทางคณิตศาสตร์คล้ายกับใน C มันมีprintfและฟังก์ชั่น "K" ใน "AWK" ย่อมาจาก " K ernighan" ในขณะที่ "Kernighan และ Ritchie" ของหนังสือ "C Programming Language" มีชื่อเสียง (ไม่ลืมA Ho และW einberger) awkหนึ่งกลัวจะเขียนเครื่องตรวจจับการขโมยความคิดของนักวิชาการโดยใช้
GNU awk( gawk) มีส่วนขยายจำนวนมากรวมถึงอาร์เรย์หลายมิติที่แท้จริงในรุ่นล่าสุด มีรูปแบบอื่น ๆ ของการอยู่awkรวมและmawknawk
โปรแกรมทั้งสองใช้นิพจน์ทั่วไปสำหรับการเลือกและประมวลผลข้อความ
ฉันมักจะใช้sedที่มีรูปแบบในข้อความ ตัวอย่างเช่นคุณสามารถแทนที่ตัวเลขลบทั้งหมดในข้อความบางข้อความที่อยู่ในรูปแบบ "เครื่องหมายลบแล้วตามด้วยตัวเลข" (เช่น "-231.45") ด้วยรูปแบบ "วงเล็บของนักบัญชี" (เช่น 231.45) ) ใช้สิ่งนี้ (ซึ่งมีห้องสำหรับการปรับปรุง):
sed 's/-\([0-9.]\+\)/(\1)/g' inputfile
ฉันจะใช้awkเมื่อข้อความดูเหมือนแถวและคอลัมน์มากขึ้นหรือตามที่awkอ้างถึง "บันทึก" และ "ช่อง" ถ้าฉันจะทำการดำเนินการที่คล้ายกันดังกล่าวข้างต้น แต่เฉพาะในเขตที่สามในไฟล์ที่คั่นด้วยจุลภาคง่ายๆฉันอาจทำสิ่งที่ชอบ:
awk -F, 'BEGIN {OFS = ","} {gsub("-([0-9.]+)", "(" substr($3, 2) ")", $3); print}' inputfile
แน่นอนว่านี่เป็นเพียงตัวอย่างง่ายๆที่ไม่ได้แสดงให้เห็นถึงความสามารถที่หลากหลายที่แต่ละคนมีให้
sed: sed.sourceforge.net/#scripts
1) อะไรคือความแตกต่างระหว่าง awk และ sed?
ทั้งสองเป็นเครื่องมือที่แปลงข้อความ แต่ awk สามารถทำสิ่งต่าง ๆ ได้มากกว่าเพียงแค่จัดการข้อความ มันเป็นภาษาการเขียนโปรแกรมด้วยตัวเองโดยส่วนใหญ่ของสิ่งที่คุณเรียนรู้ในการเขียนโปรแกรมเช่นอาร์เรย์ลูปถ้า / อื่น ๆ การควบคุมการไหล ฯลฯ คุณสามารถ "โปรแกรม" ใน sed เช่นกัน แต่คุณไม่ต้องการที่จะรักษารหัสเขียนไว้ .
2) ชนิดของแอปพลิเคชันประเภทใดบ้างที่เหมาะกับกรณีที่ใช้กับเครื่องมือ sed และ awk
สรุป: ใช้ sed สำหรับการแยกวิเคราะห์ข้อความที่ง่ายมาก อะไรนอกเหนือจากนั้น awk จะดีกว่า ในความเป็นจริงคุณสามารถขุดคูด้วยกันและใช้ awk เนื่องจากฟังก์ชั่นของพวกเขาซ้อนทับและ awk สามารถทำได้มากกว่าเพียงแค่ใช้ awk คุณจะลดช่วงการเรียนรู้ของคุณเช่นกัน
sed, 's/search/replace'เป็นวิธีที่ง่ายในการพิมพ์มากกว่าawk's ไวยากรณ์และเป็นสิ่งที่คุณต้องการมากที่สุดของเวลา
เครื่องมือทั้งสองมีไว้เพื่อทำงานกับข้อความและมีงานที่สามารถใช้ทั้งสองเครื่องมือได้
สำหรับฉันกฎที่จะแยกพวกเขาคือ: ใช้sedเพื่อทำงานอัตโนมัติคุณจะทำอย่างอื่นในโปรแกรมแก้ไขข้อความด้วยตนเอง นั่นเป็นเหตุผลว่าทำไมจึงเรียกว่ากระแสบรรณาธิการ (คุณสามารถใช้คำสั่งเดียวกันเพื่อแก้ไขข้อความในกลุ่ม) ใช้awkถ้าคุณต้องการวิเคราะห์ข้อความหมายถึงการนับฟิลด์คำนวณผลรวมแยกและจัดโครงสร้างใหม่เป็นต้น
grepนอกจากนี้คุณไม่ควรลืมเกี่ยวกับ ใช้grepหากคุณต้องการค้นหา / แยกบางอย่างในข้อความ (ไฟล์)