여러 개의 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
\
앞에 하나를 추가 하면 .
또 다른 오류 메시지가 나타납니다.
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"