How to split the xml code

[<?xml version="1.0" encoding="UTF-8"?><FeedAcknowledgement>
<FeedHeader>
<FeedRunId>ID:2d34666235326237663a31333266393636366465633a2d37</FeedRunId>
<FeedName>CLASSIFICATIONMASTER</FeedName>
<AsOf>10/13/2011</AsOf>
<FeedReceivedMode>MQ</FeedReceivedMode>
</FeedHeader>
<Details>
<State>PROCESSED</State>
<Status>FAILED</Status>
<ErrorMessage>Feed definition not found for a give feed name:CLASSIFICATIONMASTER. Please verify the feed name!!</ErrorMessage>
<TimeStamp TimeZone="EST">2011-10-13 18:43:56.524</TimeStamp>
<AsAt TimeZone="EST">2011-10-13 18:43:51.047</AsAt>
</Details>
</FeedAcknowledgement>
]
[<?xml version="1.0" encoding="UTF-8"?><FeedAcknowledgement>
<FeedHeader>
<FeedRunId>403f5086:132f95adad8:-7fe3</FeedRunId>
<FeedName>SECURITYPARTIES</FeedName>
<AsOf>10/12/2011</AsOf>
<FeedReceivedMode>MQ</FeedReceivedMode>
</FeedHeader>
<Details>
<State>PROCESSED</State>
<Status>SUCCESS</Status>
<TimeStamp TimeZone="EST">2011-10-13 18:45:47.923</TimeStamp>
<AsAt TimeZone="EST">2011-10-13 18:45:41.386</AsAt>
<MetaData>
<HierarchyLevels>
<HierarchyLevel>
<Level>1</Level>
<LevelIdentifier>NONE</LevelIdentifier>
<TotalNumRowsInFeed>40</TotalNumRowsInFeed>
<NumRowsSuccessful>40</NumRowsSuccessful>
<NumRowsInError>0</NumRowsInError>
<MappedCategory>DEAM_SECURITY_PARTIES</MappedCategory>
</HierarchyLevel>
</HierarchyLevels>
</MetaData>
</Details>
</FeedAcknowledgement>
]

I have the file which contain the xml code.. I want to split all the xml code. Each xml code starts with "[" and ends with "]".
HOw can I split the each xml code in to seprate file

perl -ne '
if (/\[<\?xml/../^\]/) {
    (/\[<\?xml/) && ($f=sprintf "%02d", $i);
    open O,">> file$f"; print O; close O;
    (/^\]/) && $i++
}' inputfile

For the sample input given, you'll get two files viz. file00 and file01 each containing an xml.

Thank you.. Here I want to compare the string in each XML code . If the strin present then move the specific XML code in to a file.. I dont want to create all the files . It is possible using awk ?. beacuse am not familiar with perl

@arukuku

  1. Please be clear as to what exactly you're looking for.
  2. You initial post did not mention anything about "compare the string".
  3. It is of course possible in awk.
  4. What is it that has to be compared?
  5. What are the conditions that dictate the comparison?
[<?xml version="1.0" encoding="UTF-8"?><ESP_SSIA_ACC_FEED>
<BATCH_ID>01112012034346646BTLJ3448</BATCH_ID>
<UID>1326271480221</UID>
<FEED_TYPE>FULL</FEED_TYPE>
<MART_NAME>SSIA_DM_TRANSACTIONS</MART_NAME>
<MART_TYPE>SSIA_TRANSACTIONS</MART_TYPE>
<CLIENT_ID>ESPDB</CLIENT_ID>
<SQL>FROM  SSIA_DM_TRANSACTIONS  WHERE   ASAT BETWEEN '2012-01-10T03:44:48.385' and '2012-01-11T03:43:46.646' AND       SSIA_ACCOUNT_CODE = 'BTLJ3448' AND PORTFOLIO_CODE = 'J03448' </SQL>
</ESP_SSIA_ACC_FEED>
]
[<?xml version="1.0" encoding="UTF-8"?><ESP_SSIA_ACC_FEED>
<BATCH_ID>01112012034346646BTAL2464</BATCH_ID>
<UID>1326271480355</UID>
<FEED_TYPE>FULL</FEED_TYPE>
<MART_NAME>SSIA_DM_TRANSACTIONS</MART_NAME>
<MART_TYPE>SSIA_TRANSACTIONS</MART_TYPE>
<CLIENT_ID>ESPDB</CLIENT_ID>
<SQL>FROM  SSIA_DM_TRANSACTIONS  WHERE   ASAT BETWEEN '2012-01-10T03:44:48.385' and '2012-01-11T03:43:46.646' AND       SSIA_ACCOUNT_CODE = 'BTAL2464' AND PORTFOLIO_CODE = 'B02464' </SQL>
</ESP_SSIA_ACC_FEED>
]
[<?xml version="1.0" encoding="UTF-8"?><ESP_SSIA_ACC_FEED>
<BATCH_ID>01112012034346646BTAC466G</BATCH_ID>
<UID>1326271480521</UID>
<FEED_TYPE>FULL</FEED_TYPE>
<MART_NAME>SSIA_DM_TRANSACTIONS</MART_NAME>
<MART_TYPE>SSIA_TRANSACTIONS</MART_TYPE>
<CLIENT_ID>ESPDB</CLIENT_ID>
<SQL>FROM  SSIA_DM_TRANSACTIONS  WHERE   ASAT BETWEEN '2012-01-10T03:44:48.385' and '2012-01-11T03:43:46.646' AND       SSIA_ACCOUNT_CODE = 'BTAC466G' AND PORTFOLIO_CODE = '17466G' </SQL>
</ESP_SSIA_ACC_FEED>
]
[<?xml version="1.0" encoding="UTF-8"?><ESP_SSIA_ACC_FEED>^M
  <BATCH_ID>10142011103500856BTAL2464</BATCH_ID>^M
  <UID>1318603038699</UID>^M
  <FEED_TYPE>FULL</FEED_TYPE>^M
  <MART_NAME>SSIA_DM_TRANSACTIONS</MART_NAME>^M
  <MART_TYPE>SSIA_TRANSACTIONS</MART_TYPE>^M
  <CLIENT_ID>ESPDB</CLIENT_ID>^M
  <SQL>FROM SSIA_DM_TRANSACTIONS WHERE ASAT BETWEEN^M
  '2012-01-10T00:00:00.001' and '2012-01-10T23:59:59.999' AND^M
  SSIA_ACCOUNT_CODE = 'BTAL2464' AND PORTFOLIO_CODE = 'BTAL2464'</SQL>^M
[<?xml version="1.0" encoding="UTF-8"?><ESP_SSIA_ACC_FEED>^M
<BATCH_ID>01112012034346646BTAL2464</BATCH_ID>^M
<UID>1326271480355</UID>^M
<FEED_TYPE>FULL</FEED_TYPE>^M
<MART_NAME>SSIA_DM_TRANSACTIONS</MART_NAME>^M
<MART_TYPE>SSIA_TRANSACTIONS</MART_TYPE>^M
<CLIENT_ID>ESPDB</CLIENT_ID>^M
<SQL>FROM  SSIA_DM_TRANSACTIONS  WHERE   ASAT BETWEEN '2012-01-10T03:44:48.385' and '2012-01-11T03:43:46.646' AND       SSIA_ACCOUNT_CODE = 'BTAL2464' AND PORTFOLIO_CODE = 'B02464' </SQL>^M
</ESP_SSIA_ACC_FEED>^M
]
[<?xml version="1.0" encoding="UTF-8"?><ESP_SSIA_ACC_FEED>  <BATCH_ID>0118201201130853940</BATCH_ID>  <UID>1326867190825</UID>  <FEED_TYPE>FULL</FEED_TYPE>  <MART_NAME>SSIA_DM_SECMASTER</MART_NAME>  <MART_TYPE>SSIA_SECMASTER</MART_TYPE>  <CLIENT_ID>ESPDB</CLIENT_ID>  <SQL>FROM        SSIA_DM_SECMASTER    WHERE        ASOF BETWEEN '2012-01-17'  AND '2012-01-18' AND        ASAT BETWEEN '2012-01-17T03:56:01.170' AND '2012-01-18T01:13:08.539' AND        ASSET_TYPE_CODE = 40      </SQL>
</ESP_SSIA_ACC_FEED>
]
[<?xml version="1.0" encoding="UTF-8"?><ESP_SSIA_ACC_FEED>  <BATCH_ID>0118201201130853910</BATCH_ID>  <UID>1326867191296</UID>  <FEED_TYPE>FULL</FEED_TYPE>  <MART_NAME>SSIA_DM_SECMASTER</MART_NAME>  <MART_TYPE>SSIA_SECMASTER</MART_TYPE>  <CLIENT_ID>ESPDB</CLIENT_ID>  <SQL>FROM        SSIA_DM_SECMASTER    WHERE        ASOF BETWEEN '2012-01-17'  AND '2012-01-18' AND        ASAT BETWEEN '2012-01-17T03:56:01.170' AND '2012-01-18T01:13:08.539' AND        ASSET_TYPE_CODE = 10      </SQL>
</ESP_SSIA_ACC_FEED>
]

Sorry.... The file contains bunch of XML code. Search for the id (Eg:01112012034346646BTAL2464) and pull the xml associated with the id.