I have one big XML file which contains information about 100 jobs,"JOB JOBISN=" indicates that is a job so where ever tag starts with "JOB JOBISN=" then i need to add below highlighted line between
"<INCOND NAME" and "<OUTCOND NAME" for all jobs.like this i want to add below highlighted line for all jobs.
Line to be added:
<QUANTITATIVE ="PRICDRL" QUANT="1" ONFAIL="R" ONOK="R" />
Data
<JOB JOBISN="3" APPLICATION="PRICD" SUB_APPLICATION="DALY" PARENT_FOLDER="PDALY">
<INCOND NAME="PL-PICDDMD82-OK" ODATE="PREV" AND_OR="A" />
<QUANTITATIVE ="PRICDRL" QUANT="1" ONFAIL="R" ONOK="R" />
<OUTCOND NAME="PL-PICDDMD01_SOLOMON_HK_DALY-OK" >
<RULE_BASED_CALENDARS NAME="ALL-DAY-TAG" />
</JOB>
<JOB JOBISN="4" APPLICATION="PRICD" RENT_FOLDER="PRICDG-SOLOMON-DALY">
<INCOND NAME="PL-PICDDMD81_-OK" ODATE="ODAT" AND_OR="A" />
<QUANTITATIVE ="PRICDRL" QUANT="1" ONFAIL="R" ONOK="R" />
<OUTCOND NAME="PL-PICDDMD82_Y-OK" ODATE="ODAT" SIGN="+" />
<RULE_BASED_CALENDARS NAME="ALL-DAY-TAG" />
</JOB>
please help me how to add above highlighted line using unix command.
Please use code tag for i/p and o/p code.
awk '/^<INCOND NAME/ { print;getline;
if (/^<OUTCOND NAME/) {print "<QUANTITATIVE =\"PRICDRL\" QUANT=\"1\" ONFAIL=\"R\" ONOK=\"R\" />"}}1' filename
above command is not working.
Could you please post error message ?
i am not getting any error but it is not appending the line if it is more than one "<INCOND NAME" condition.please check below.
Data
<JOB JOBISN="3" APPLICATION="PRICD" SUB_APPLICATION="DALY" PARENT_FOLDER="PDALY">
<INCOND NAME="PL-PICDDMD82-OK" ODATE="PREV" AND_OR="A" />
<INCOND NAME="PL-PICDDMD82-OK" ODATE="PREV" AND_OR="A" />
<OUTCOND NAME="PL-_DALY-OK" ODATE="ODAT" SIGN="+" />
<RULE_BASED_CALENDARS NAME="ALL-DAY-TAG" />
</JOB>
Again .. Please use code tag
awk '/^<INCOND NAME/ { print;prev=$0;next}
{if (/^<OUTCOND NAME/ && prev ~ /^<INCOND NAME/) {print "<QUANTITATIVE =\"PRICDRL\" QUANT=\"1\" ONFAIL=\"R\" ONOK=\"R\" />"}}1' filename
thanks boss its woking,can u please explain how the below command will work.
Would this help you ?
$ awk '/<INCOND NAME=/{print;s=1;next}s{$0=line_to_be;s=""}1' line_to_be='<QUANTITATIVE ="PRICDRL" QUANT="1" ONFAIL="R" ONOK="R" />' file
<JOB JOBISN="3" APPLICATION="PRICD" SUB_APPLICATION="DALY" PARENT_FOLDER="PDALY">
<INCOND NAME="PL-PICDDMD82-OK" ODATE="PREV" AND_OR="A" />
<QUANTITATIVE ="PRICDRL" QUANT="1" ONFAIL="R" ONOK="R" />
<OUTCOND NAME="PL-PICDDMD01_SOLOMON_HK_DALY-OK" >
<RULE_BASED_CALENDARS NAME="ALL-DAY-TAG" />
</JOB>
<JOB JOBISN="4" APPLICATION="PRICD" RENT_FOLDER="PRICDG-SOLOMON-DALY">
<INCOND NAME="PL-PICDDMD81_-OK" ODATE="ODAT" AND_OR="A" />
<QUANTITATIVE ="PRICDRL" QUANT="1" ONFAIL="R" ONOK="R" />
<OUTCOND NAME="PL-PICDDMD82_Y-OK" ODATE="ODAT" SIGN="+" />
<RULE_BASED_CALENDARS NAME="ALL-DAY-TAG" />
</JOB>