awk + string ที่ตรงกันหลังตัวคั่น“ =”


0

ฉันมีปัญหากับไวยากรณ์ awk ต่อไปนี้

    echo " param1 param2 param3 = param1 AA , AB , AC , AD  "  | awk -F"=" '$2~/AA|AB|AC|AD/{print "passed"}'

พิมพ์ awk ผ่านไปแล้ว แต่ไม่ใช่ shuld เพราะหลังจาก "=" ฉันมี param1 และไม่ใช่ "AA" หรือ AB "เป็นต้น

เป้าหมายของ awk คือการพิมพ์ผ่านหากสตริงหลัง "=" คือ AA หรือ AB หรือ AC หรือ AD

และถ้าฉันมีอย่างอื่นหลังจาก "=" ก็ไม่ควรพิมพ์ผ่าน

วิธีแก้ไขไวยากรณ์ awk?

lidia

คำตอบ:


1

หลังจากที่คุณมีสตริง= param1 AA , AB , AC , ADการแสดงออกของคุณยอมรับ awk สตริงใด ๆ ที่มี AAหรือABหรือหรือAC ADหากคุณต้องการให้คำเหล่านี้ปรากฏที่จุดเริ่มต้นของเขตข้อมูลคุณจะต้องยึดรูปแบบ (เริ่มต้นด้วย^เพื่อให้ตรงกับที่จุดเริ่มต้นเท่านั้นให้จบด้วย '$' เพื่อจับคู่ที่ส่วนท้ายเท่านั้น) ตัวอย่างเช่นนิพจน์ต่อไปนี้ต้องการให้ฟิลด์เป็นหนึ่งในคำที่ระบุซึ่งอาจมีช่องว่างก่อนและหลัง:

$2 ~ /^ *(AA|AB|AC|AD) *$/

คำตอบที่ดีกว่าและสมบูรณ์กว่าของฉัน
W_Whalley

0

นิพจน์ awk นี้เพื่อค้นหา AA ที่จุดเริ่มต้นของฟิลด์คือ ^ AA หรืออนุญาตเว้นวรรคเป็นศูนย์หรือมากกว่าระหว่าง = และ AA มันคือ ^ * AA ดังนั้นนิพจน์นี้ควรพิมพ์เฉพาะเมื่อผ่านเทอมแรกหลังจาก = คือ AA หรือ BB หรือ AC หรือ AD นำหน้าด้วยช่องว่างศูนย์หรือมากกว่า

awk -F"=" '$2~/^ *AA|^ *AB|^ *AC|^ *AD/{print "passed"}'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.