複数のXMLレコードを含むtxtファイルがあります。を使用して分離する必要があります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
\
前に1つを追加すると、.
別のエラーメッセージが表示されます。
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
バックスラッシュエスケープが必要です。両方slash 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"