ฉันกำลังอ่านสคริปต์ awk นี้
awk -F"=" '{OFS="=";gsub(",",";",$2)}1'
ฉันต้องการที่จะรู้ว่าอะไรคือฟังก์ชั่น1
ในตอนท้ายของมัน
ฉันกำลังอ่านสคริปต์ awk นี้
awk -F"=" '{OFS="=";gsub(",",";",$2)}1'
ฉันต้องการที่จะรู้ว่าอะไรคือฟังก์ชั่น1
ในตอนท้ายของมัน
คำตอบ:
awk
โปรแกรมเป็นชุดของคู่สภาพการกระทำเงื่อนไขการเป็นนอกวงเล็บปีกกาและการกระทำที่ถูกปิดล้อมอยู่ในพวกเขา เงื่อนไขถือว่าเป็นเท็จหากประเมินเป็นศูนย์หรือสตริงว่างสิ่งอื่นใดเป็นจริง (ตัวแปรเริ่มต้นเป็นศูนย์หรือสตริงว่างขึ้นอยู่กับบริบทดังนั้นพวกเขาจึงเป็นเท็จ) เงื่อนไขหรือการกระทำอาจเป็นนัย การจัดฟันโดยไม่มีเงื่อนไข (ตามที่คุณเริ่ม) ถือว่าเป็นเงื่อนไขจริงและจะถูกดำเนินการเสมอหากถูกตีและเงื่อนไขใด ๆ ที่ไม่มีการดำเนินการจะพิมพ์บรรทัดถ้าหากตรงตามเงื่อนไขเท่านั้น
1
ในตอนท้ายของสคริปต์ของคุณเป็นเงื่อนไข (จริงเสมอ) ที่มีการดำเนินการใดจึงดำเนินการดำเนินการเริ่มต้นสำหรับทุกบรรทัดพิมพ์บรรทัด (ซึ่งอาจได้รับการแก้ไขโดยการกระทำก่อนหน้านี้ในวงเล็บ)
ฉันไม่ชอบทางลัดประเภทนี้เพราะทำให้สับสนและเข้าใจผิดว่ามีการแยกวิเคราะห์อย่างไร เมื่อคุณอ่านบางสิ่งเช่นawk -F"=" '{OFS="=";gsub(",",";",$2)}1'
คุณอาจคิดว่า1
คำสั่งนั้นกำลังแก้ไขคำสั่งก่อนหน้า หรือคุณอาจคิดว่า1
เป็นนามแฝงสำหรับ{print}
ซึ่งไม่ถูกต้องทางเทคนิค
ในความเป็นจริง1
เป็นคำสั่งที่แยกจากกันโดยสิ้นเชิง คุณสามารถแยกข้อความเช่นนี้ออกได้:
awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1
'
แต่ละรูปแบบคำสั่ง awk condition {action}
คือ ถ้าไม่มีให้แล้วการดำเนินการเริ่มต้นคือ{action}
{print}
(หากไม่มีการcondition
กำหนดเงื่อนไขเริ่มต้นคือtrue
)
ดังนั้นที่นี่1
เป็นเงื่อนไขที่มักจะประเมินtrue
เพราะมันไม่ใช่ศูนย์ action
ถูกละไว้เพื่อเริ่มต้น{print}
จะดำเนินการ คุณสามารถคิดแบบนี้:
awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1!=0 {print}
'
1
หมายถึงการพิมพ์ทุกบรรทัด
คำสั่ง awk เหมือนกับการเขียน:
awk -F"=" '{OFS="=";gsub(",",";",$2);print $0;}'
awk -F"=" '{OFS="=";gsub(",",";",$2)}{print}'