แยกไฟล์ตามรูปแบบที่ตรงกับส่วนหัวที่แตกต่างกันเป็นไฟล์โดยใช้ AWK

ฉันมีไฟล์ที่ต้องแยกตามรูปแบบการค้นหาออกเป็นหลายไฟล์และมีส่วนหัวที่แตกต่างกันสำหรับไฟล์ต่างๆ ฉันสามารถแยกไฟล์ได้แต่ไม่สามารถเพิ่มส่วนหัวที่แตกต่างกันให้กับไฟล์อื่นได้ นี่คือรหัสที่ฉันลอง:

BEGIN {
    {
       a=substr($0,38,2)

       if(a=="HD")
       {    
        print"a","b","c"...
         OFS="|"  
        }
       if(a=="AS")
        {    
        print"e","f","g"...
        OFS="|"
        }
    }   
}
{
       a=substr($0,38,2)

       if(a=="HD")
       {
        FIELDWIDTHS="10 8 10 9 2 1 1 11 14 14 14 14 14 14 14 14 8 60 30 30 32 32 27 18 11 346"
        OFS="|"  
        }
        if(a=="AS")
        {       
        FIELDWIDTHS="10 8 10 9 2 1 7 30 14 14 14 14 625"
        OFS="|"
        }
}
{
  $1=$1
  print > a".txt"
}

person user3168017    schedule 19.09.2014    source แหล่งที่มา
comment
เป็นที่น่าสังเกตว่า FIELDWIDTHS เป็นส่วนขยายที่เพ่งพิศ ฉันได้เพิ่มแท็กแล้ว   -  person Tom Fenech    schedule 19.09.2014


คำตอบ (1)


ทำไมไม่ทำแบบข้างล่างนี้ล่ะ? และเท่าที่ฉันเห็น การตั้งค่า FIELDWITHS จะทำงานได้อย่างถูกต้องก็ต่อเมื่อตั้งค่าไว้ในบล็อก BEGIN (หรือเมื่อเปลี่ยนไฟล์อินพุต...):

awk 'NR=1 { HEADER1 = "whatever" ; HEADER2 = "whatever2" ; 
           print HEADER1 > FIRSTFILE ; 
           print HEADER2 > SECONDFILE ; 
         }
    { a=substr($0,38,2)
      OFS="|"
      print $0 >> a".txt"
    }' INPUTFILE
person Zsolt Botykai    schedule 19.09.2014