Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

ข้อมูลเบื้องต้นเกี่ยวกับ Master Awk:อธิบายคำสั่งการพิมพ์ที่จำเป็น 7 ประการ

ข้อมูลเบื้องต้นเกี่ยวกับ Master Awk:อธิบายคำสั่งการพิมพ์ที่จำเป็น 7 ประการ

นี่เป็นบทความแรกเกี่ยวกับชุดบทช่วยสอน awk ใหม่ เราจะโพสต์บทความหลายบทความเกี่ยวกับ awk ในอีกไม่กี่สัปดาห์ข้างหน้า ซึ่งจะครอบคลุมฟีเจอร์ทั้งหมดของ awk พร้อมตัวอย่างที่ใช้งานได้จริง

ในบทความนี้ เราจะมาทบทวนวิธีการทำงานของ awk พื้นฐานพร้อมกับตัวอย่างการพิมพ์ awk ที่ใช้งานได้จริง 7 ตัวอย่าง

หมายเหตุ: อย่าลืมตรวจสอบซีรีส์ Sed Tutorial ก่อนหน้านี้ของเรา

Awk บทนำและการดำเนินการพิมพ์

Awk เป็นภาษาโปรแกรมที่ช่วยให้จัดการข้อมูลที่มีโครงสร้างและสร้างรายงานที่จัดรูปแบบได้ง่าย Awk ย่อมาจากชื่อผู้เขียน “A โฮ ไอน์เบอร์เกอร์ และ K เอร์นิแกน”

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

คุณสมบัติหลักบางประการของ Awk คือ:

  • Awk ดูไฟล์ข้อความเป็นบันทึกและฟิลด์
  • เช่นเดียวกับภาษาการเขียนโปรแกรมทั่วไป Awk มีตัวแปร เงื่อนไข และลูป
  • Awk มีตัวดำเนินการทางคณิตศาสตร์และสตริง
  • Awk สามารถสร้างรายงานที่มีรูปแบบ

Awk อ่านจากไฟล์หรือจากอินพุตมาตรฐาน และส่งออกไปยังเอาต์พุตมาตรฐาน Awk เข้ากันไม่ได้กับไฟล์ที่ไม่ใช่ข้อความ

Syntax:
awk '/search pattern1/ {Actions}
 /search pattern2/ {Actions}' file

ในไวยากรณ์ awk ข้างต้น:

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

วิธีการทำงานของ Awk

  1. Awk อ่านไฟล์อินพุตทีละบรรทัด
  2. สำหรับแต่ละบรรทัด จะจับคู่กับรูปแบบที่กำหนดในลำดับที่กำหนด หากการจับคู่มีการกระทำที่สอดคล้องกัน
  3. หากไม่มีรูปแบบที่ตรงกัน จะไม่มีการดำเนินการใดๆ
  4. ในรูปแบบข้างต้น รูปแบบการค้นหาหรือการดำเนินการเป็นทางเลือก แต่ไม่ใช่ทั้งสองอย่าง
  5. หากไม่ได้ระบุรูปแบบการค้นหา Awk จะดำเนินการตามที่กำหนดสำหรับแต่ละบรรทัดของอินพุต
  6. หากไม่ได้รับการดำเนินการ ให้พิมพ์บรรทัดทั้งหมดที่ตรงกับรูปแบบที่กำหนดซึ่งเป็นการดำเนินการเริ่มต้น
  7. วงเล็บปีกกาที่ว่างเปล่าโดยไม่มีการดำเนินการใดๆ จะไม่ทำอะไรเลย มันจะไม่ดำเนินการพิมพ์เริ่มต้น
  8. แต่ละคำสั่งใน Actions ควรคั่นด้วยเครื่องหมายอัฒภาค

ให้เราสร้างไฟล์ Employee.txt ซึ่งมีเนื้อหาดังต่อไปนี้ซึ่งจะนำไปใช้ใน
ตัวอย่างที่กล่าวถึงด้านล่าง

$cat employee.txt
100 Thomas Manager Sales $5,000
200 Jason Developer Technology $5,500
300 Sanjay Sysadmin Technology $7,000
400 Nisha Manager Marketing $9,500
500 Randy DBA Technology $6,000

ตัวอย่าง Awk 1. พฤติกรรมเริ่มต้นของ Awk

ตามค่าเริ่มต้น Awk จะพิมพ์ทุกบรรทัดจากไฟล์

$ awk '{print;}' employee.txt
100 Thomas Manager Sales $5,000
200 Jason Developer Technology $5,500
300 Sanjay Sysadmin Technology $7,000
400 Nisha Manager Marketing $9,500
500 Randy DBA Technology $6,000

ในรูปแบบตัวอย่างข้างต้นไม่ได้รับ ดังนั้นการกระทำจึงใช้ได้กับทุกบรรทัด
Action print โดยไม่มีข้อโต้แย้งใด ๆ จะพิมพ์ทั้งบรรทัดตามค่าเริ่มต้น ก็เลยพิมพ์ทั้งหมด.
บรรทัดของไฟล์โดยไม่ล้มเหลว การดำเนินการจะต้องอยู่ในวงเล็บปีกกา

ตัวอย่าง Awk 2. พิมพ์เส้นที่ตรงกับรูปแบบ

$ awk '/Thomas/
> /Nisha/' employee.txt
100 Thomas Manager Sales $5,000
400 Nisha Manager Marketing $9,500

ในตัวอย่างข้างต้น จะพิมพ์บรรทัดทั้งหมดที่ตรงกับ 'Thomas' หรือ 'Nisha' มันมีอยู่สองแบบ Awk ยอมรับรูปแบบจำนวนเท่าใดก็ได้ แต่แต่ละชุด (รูปแบบและการดำเนินการที่เกี่ยวข้อง) จะต้องคั่นด้วยการขึ้นบรรทัดใหม่

ตัวอย่าง Awk 3 พิมพ์เฉพาะฟิลด์ที่ระบุเท่านั้น

Awk มีจำนวนตัวแปรในตัว สำหรับแต่ละเรคคอร์ด เช่น บรรทัด จะแยกเรคคอร์ดที่คั่นด้วยอักขระช่องว่างตามค่าเริ่มต้น และจัดเก็บไว้ในตัวแปร $n หากบรรทัดมี 4 คำ ระบบจะจัดเก็บเป็น $1, $2, $3 และ $4 $0 หมายถึงทั้งบรรทัด NF เป็นตัวแปรในตัวซึ่งแสดงถึงจำนวนฟิลด์ทั้งหมดในบันทึก

$ awk '{print $2,$5;}' employee.txt
Thomas $5,000
Jason $5,500
Sanjay $7,000
Nisha $9,500
Randy $6,000
$ awk '{print $2,$NF;}' employee.txt
Thomas $5,000
Jason $5,500
Sanjay $7,000
Nisha $9,500
Randy $6,000

ในตัวอย่างข้างต้น $2 และ $5 แสดงถึงชื่อและเงินเดือนตามลำดับ เราสามารถรับเงินเดือนโดยใช้  $NF ได้เช่นกัน โดยที่ $NF แสดงถึงช่องสุดท้าย ในคำสั่งการพิมพ์ ',' เป็นตัวเชื่อม

ตัวอย่าง Awk 4 การเริ่มต้นและการดำเนินการขั้นสุดท้าย

Awk มีรูปแบบที่สำคัญสองรูปแบบซึ่งระบุโดยคำหลักที่เรียกว่า BEGIN และ END

Syntax: 
BEGIN { Actions}
{ACTION} # Action for everyline in a file
END { Actions }
# is for comments in Awk

การดำเนินการที่ระบุในส่วน BEGIN จะถูกดำเนินการก่อนที่จะเริ่มอ่านบรรทัดจากอินพุต
การดำเนินการ END จะดำเนินการหลังจากเสร็จสิ้นการอ่านและประมวลผลบรรทัดจากอินพุตแล้ว

$ awk 'BEGIN {print "Name\tDesignation\tDepartment\tSalary";}
> {print $2,"\t",$3,"\t",$4,"\t",$NF;}
> END{print "Report Generated\n--------------";
> }' employee.txt
Name Designation Department Salary
Thomas Manager Sales $5,000
Jason Developer Technology $5,500
Sanjay Sysadmin Technology $7,000
Nisha Manager Marketing $9,500
Randy DBA Technology $6,000
Report Generated
--------------

ในตัวอย่างข้างต้น จะพิมพ์พาดหัวและไฟล์สุดท้ายสำหรับรายงาน

ตัวอย่าง Awk 5. ค้นหาพนักงานที่มีรหัสพนักงานมากกว่า 200

$ awk '$1 >200' employee.txt
300 Sanjay Sysadmin Technology $7,000
400 Nisha Manager Marketing $9,500
500 Randy DBA Technology $6,000

ในตัวอย่างข้างต้น ฟิลด์แรก ($1) คือรหัสพนักงาน ดังนั้นหาก $1 มากกว่า 200 ให้ดำเนินการพิมพ์เริ่มต้นเพื่อพิมพ์ทั้งบรรทัด

ตัวอย่าง Awk 6. พิมพ์รายชื่อพนักงานในแผนกเทคโนโลยี

ขณะนี้ชื่อแผนกสามารถใช้ได้เป็นฟิลด์ที่สี่ ดังนั้นจำเป็นต้องตรวจสอบว่า $4 ตรงกับสตริง “เทคโนโลยี” หรือไม่ หากใช่ พิมพ์บรรทัด

$ awk '$4 ~/Technology/' employee.txt
200 Jason Developer Technology $5,500
300 Sanjay Sysadmin Technology $7,000
500 Randy DBA Technology $6,000

ตัวดำเนินการ ~ ใช้สำหรับเปรียบเทียบกับนิพจน์ทั่วไป หากตรงกับการกระทำเริ่มต้น เช่น พิมพ์ทั้งบรรทัดจะดำเนินการ

ตัวอย่าง Awk 7. พิมพ์จำนวนพนักงานในแผนกเทคโนโลยี

ตัวอย่างด้านล่าง ตรวจสอบว่าแผนกเป็นเทคโนโลยีหรือไม่ หากใช่ ในการดำเนินการ เพียงเพิ่มตัวแปรการนับ ซึ่งเริ่มต้นด้วยศูนย์ในส่วน BEGIN

$ awk 'BEGIN { count=0;}
$4 ~ /Technology/ { count++; }
END { print "Number of employees in Technology Dept =",count;}' employee.txt
Number of employees in Tehcnology Dept = 3

จากนั้นเมื่อสิ้นสุดกระบวนการ เพียงพิมพ์ค่าการนับซึ่งจะแสดงจำนวนพนักงานในแผนกเทคโนโลยี

การอ่านที่แนะนำ

<แข็งแกร่ง> ข้อมูลเบื้องต้นเกี่ยวกับ Master Awk:อธิบายคำสั่งการพิมพ์ที่จำเป็น 7 ประการ Sed และ Awk 101 Hacks โดย Ramesh Natarajan . ฉันใช้เวลาหลายชั่วโมงต่อวันในสภาพแวดล้อม UNIX / Linux ในการจัดการกับไฟล์ข้อความ (ข้อมูล การกำหนดค่า และไฟล์บันทึก) ฉันใช้ Sed และ Awk สำหรับงานจัดการข้อความทั้งหมดของฉัน จากประสบการณ์ Sed และ Awk ของฉัน ฉันได้เขียน eBook Sed และ Awk 101 Hacks ซึ่งมีตัวอย่างเชิงปฏิบัติ 101 ตัวอย่างเกี่ยวกับคุณสมบัติขั้นสูงต่างๆ ของ Sed และ Awk ที่จะยกระดับชีวิต UNIX / Linux ของคุณ แม้ว่าคุณจะใช้ Sed และ Awk มาหลายปีแล้วและยังไม่ได้อ่านหนังสือเล่มนี้ โปรดช่วยเหลือตัวเองและอ่านหนังสือเล่มนี้ คุณจะทึ่งกับความสามารถของยูทิลิตี้ Sed และ Awk

บทความ Awk เพิ่มเติม

  • ตัวแปรที่ผู้ใช้กำหนด Awk พร้อมตัวอย่างเชิงปฏิบัติ 3 ตัวอย่าง
  • 8 ตัวแปรในตัว Awk อันทรงพลัง – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR
  • 7 ตัวอย่างตัวดำเนินการ Awk ที่ทรงพลัง (Unary, ไบนารี, เลขคณิต, สตริง, การมอบหมาย, แบบมีเงื่อนไข, ตัวดำเนินการ Awk Reg-Ex)
  • 4 ตัวอย่างคำสั่ง Awk If ( ถ้า ถ้าเป็นอย่างอื่น ถ้าเป็นอย่างอื่น ถ้า :? )
  • ติดอยู่ในวง? Awk While, Do While, For Loop, Break, Continue, Exit Examples