使用文件中的值在 Unix 中分割文件

使用文件中的值在 Unix 中分割文件

我有一个 txt 文件,其中包含多个 XML 记录。我必须使用将其分开vendorname。我根据我的要求修改了命令。但是,它给了我 2 条错误消息:

awk: sf.awk:1: /<hdr:vendorname xmlns:hdr=\"http:\//www.mycompany.com\/header\/v1\">[A-Z]+<\/hdr:vendorname>/{
awk: sf.awk:1:                                         ^ syntax error
awk: sf.awk:1: /<hdr:vendorname xmlns:hdr=\"http:\//www.mycompany.com\/header\/v1\">[A-Z]+<\/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\">[A-Z]+<\/hdr:vendorname>/{
awk: sf.awk:1:                                         ^ backslash not last character on line

脚本

/<hdr:vendorname xmlns:hdr=\"http:\//www.mycompany.com\/header\/v1\">[A-Z]+<\/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
    }
  }

答案1

你需要反斜杠转义两个都斜线http://,而不仅仅是第一个。

因此,模式匹配应该是这样的,

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

此外,在您致电 时split()

  1. 你不应该反斜杠转义字符串中的正斜杠;
  2. 您应该反斜杠转义 后面的双引号 ( ") v1

所以字符串split()应该看起来像,

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

相关内容