กำหนดจุดเริ่มต้นของไฟล์เมื่อผ่านไฟล์หลายไฟล์ไปยัง awk


3

ฉันมีเชลล์สคริปต์ดังต่อไปนี้ -

ค้นหา "." "บัญชี" -maxdepth 1 -name "* .aspx" | xargs awk -f get_controls.awk

มันส่งไฟล์หลายไฟล์ไปยังสคริปต์ awk

BEGIN{
    FS="\""
}
...
/Src=/{
    printf("\t%s \r\n", $6);
}

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

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

เพิ่งคิดออกเมื่อฉันพิมพ์นี้ จะโพสต์คำตอบด้านล่าง!

คำตอบ:


2

นอกจากนี้NRซึ่งนับเร็กคอร์ดทั้งหมดที่ประมวลผลป่านนี้ awk มีFNRตัวแปรซึ่งนับเร็กคอร์ดในไฟล์ปัจจุบัน

หากต้องการพิมพ์ชื่อไฟล์เมื่อคุณเห็นบรรทัดแรกของไฟล์:

awk 'FNR == 1 {print "now processing " FILENAME}' file ...

หากคุณมีสิทธิ์เข้าถึงgawkคุณจะได้รับนอกเหนือจากBEGINและENDบล็อกBEGINFILEและENDFILEบล็อก


1

นี่คือสิ่งที่ฉันคิดในขณะที่พิมพ์คำถามบางครั้งฉันลืมนึกว่า awk เป็นภาษาโปรแกรม

#! /usr/bin/awk -f
BEGIN{
    FS="\""
    OLDFILENAME=""
}


/Src=/{
    if(OLDFILENAME != FILENAME) 
    {
          printf("\r\n%s  \r\n", FILENAME);
          OLDFILENAME=FILENAME
        }
    printf("\t%s \r\n", $6);
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.