РЕДАКТИРОВАТЬ: В случае, если в соответствии с комментарием ОП, если в строке содержится более чем "
значений, я выбираю самое первое значение в диапазоне от "
до "
.
awk -F'[>"<]' '
/Product ID/{
match($0,/"[^"]*/)
val=substr($0,RSTART+1,RLENGTH-1)
}
/<Name>/{
sub(/>.*</,">"val"<")
}
1' Input_file
Вывод после запуска вышеуказанного кода выглядит следующим образом:
awk -F'[>"<]' '
/Product ID/{
match($0,/"[^"]*/)
val=substr($0,RSTART+1,RLENGTH-1)
}
/<Name>/{
sub(/>.*</,">"val"<")
}
1' Input_file
<Products>
<Product ID="ABC1234" UserID="XYX" SUperUserID="ROOT" >
<Name>ABC1234</Name>
<Values>
<Value AttributeID="A">1</Value>
<Value AttributeID="B">00</Value>
</Values>
</Product>
<Product ID="XYZ1234" UserID="XYX" SUperUserID="ROOT" >
<Name>XYZ1234</Name>
<Value AttributeID="A">4</Value>
<Value AttributeID="B">10</Value>
</Values>
</Product>
Не могли бы вы попробовать следующее.
awk -F'[>"<]' '
/Product ID/{
match($0,/".*"/)
val=substr($0,RSTART+1,RLENGTH-2)
}
/<Name>/{
sub(/>.*</,">"val"<")
}
1' Input_file