Intereting Posts

Разделение файлов в Unix с использованием значений в файле

У меня есть txt-файл, который имеет несколько записей XML. Я должен отделить его, используя vendorname . Я изменил команды согласно моему требованию. Тем не менее, это дает мне 2 сообщения об ошибках:

 awk: sf.awk:1: /<hdr:vendorname xmlns:hdr=\"http:\//www.mycompany.com\/header\/v1\">[AZ]+<\/hdr:vendorname>/{ awk: sf.awk:1: ^ syntax error awk: sf.awk:1: /<hdr:vendorname xmlns:hdr=\"http:\//www.mycompany.com\/header\/v1\">[AZ]+<\/hdr:vendorname>/{ awk: sf.awk:1: ^ backslash not last character on line 

если я добавлю \ перед . , то это дает мне еще одно сообщение об ошибке

 awk: sf.awk:1: /<hdr:vendorname xmlns:hdr=\"http:\//dwh\.www.mycompany.com\/header\/v1\">[AZ]+<\/hdr:vendorname>/{ awk: sf.awk:1: ^ backslash not last character on line 

скрипт

 /<hdr:vendorname xmlns:hdr=\"http:\//www.mycompany.com\/header\/v1\">[AZ]+<\/hdr:vendorname>/{ split($0, a, "hdr:vendorname xmlns:hdr=\"http:\//www.mycompany.com\/header\/v1">|<\/hdr:vendorname") if (out["file_"a[2]".txt"] == "") { out["file_"a[2]".txt"] = $0 } else { out["file_"a[2]".txt"]=out["file_"a[2]".txt"]"\n"$0 } } END { for (fic in out) { printf out[fic] > fic } } 

Вы должны использовать обратную косую черту – скрыть оба слэша в http:// , а не только в первом.

Таким образом, соответствие шаблону должно выглядеть так,

 /<hdr:vendorname xmlns:hdr=\"http:\/\/www.mycompany.com\/header\/v1\">[AZ]+<\/hdr:vendorname>/ 

Кроме того, в вашем вызове split() ,

  1. вы не должны сбрасывать обратную косую черту – избегайте косой черты в строке;
  2. вы должны обратная косая черта – избежите двойной кавычки ( " ) после v1 .

Поэтому строка в split() должна выглядеть так:

 "hdr:vendorname xmlns:hdr=\"http://www.mycompany.com/header/v1\">|</hdr:vendorname"