我有一个 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()
,
- 你不应该反斜杠转义字符串中的正斜杠;
- 您应该反斜杠转义 后面的双引号 (
"
)v1
。
所以字符串split()
应该看起来像,
"hdr:vendorname xmlns:hdr=\"http://www.mycompany.com/header/v1\">|</hdr:vendorname"