ฉันกำลังอ่านสคริปต์ 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}'