ความหมายของ 1 คืออะไรเมื่อสิ้นสุดสคริปต์ awk


19

ฉันกำลังอ่านสคริปต์ awk นี้

awk -F"=" '{OFS="=";gsub(",",";",$2)}1'

ฉันต้องการที่จะรู้ว่าอะไรคือฟังก์ชั่น1ในตอนท้ายของมัน


คุณสามารถทำได้awk -F"=" '{OFS="=";gsub(",",";",$2)}{print}'
GypsyCosmonaut

คำตอบ:


24

awkโปรแกรมเป็นชุดของคู่สภาพการกระทำเงื่อนไขการเป็นนอกวงเล็บปีกกาและการกระทำที่ถูกปิดล้อมอยู่ในพวกเขา เงื่อนไขถือว่าเป็นเท็จหากประเมินเป็นศูนย์หรือสตริงว่างสิ่งอื่นใดเป็นจริง (ตัวแปรเริ่มต้นเป็นศูนย์หรือสตริงว่างขึ้นอยู่กับบริบทดังนั้นพวกเขาจึงเป็นเท็จ) เงื่อนไขหรือการกระทำอาจเป็นนัย การจัดฟันโดยไม่มีเงื่อนไข (ตามที่คุณเริ่ม) ถือว่าเป็นเงื่อนไขจริงและจะถูกดำเนินการเสมอหากถูกตีและเงื่อนไขใด ๆ ที่ไม่มีการดำเนินการจะพิมพ์บรรทัดถ้าหากตรงตามเงื่อนไขเท่านั้น

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


7

ฉันไม่ชอบทางลัดประเภทนี้เพราะทำให้สับสนและเข้าใจผิดว่ามีการแยกวิเคราะห์อย่างไร เมื่อคุณอ่านบางสิ่งเช่น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}
'

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.