- อะไรคือความแตกต่างระหว่าง 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
รวมและmawk
nawk
โปรแกรมทั้งสองใช้นิพจน์ทั่วไปสำหรับการเลือกและประมวลผลข้อความ
ฉันมักจะใช้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
หากคุณต้องการค้นหา / แยกบางอย่างในข้อความ (ไฟล์)