Hi Experts,
I have a requirement like, I have to search between 2 words (<deviceDetails> and </deviceDetails>) and merge all lines in between into 1 line.
Example:
<deviceDetails><subscriberName>#UNKNOWN#</subscriberName>
<customerNumber>#UNKNOWN#</customerNumber>
<MCN>#UNKNOWN#</MCN></deviceDetails>
<deviceDetails><subscriberName>ABC</subscriberName>
<customerNumber>123</customerNumber>
<MCN>#UNKNOWN#</MCN></deviceDetails>
Output (2 lines):
<deviceDetails><subscriberName>#UNKNOWN#</subscriberName><customerNumber>#UNKNOWN#</customerNumber><MCN>#UNKNOWN#</MCN></deviceDetails>
<deviceDetails><subscriberName>ABC</subscriberName><customerNumber>123</customerNumber><MCN>#UNKNOWN#</MCN></deviceDetails>
Thanks in advance.
$ awk -v ORS="" '/\/deviceDetails/ { $0=$0"\n" } 1' < infile > outfile
$ cat outfile
<deviceDetails><subscriberName>#UNKNOWN#</subscriberName><customerNumber>#UNKNOWN#</customerNumber><MCN>#UNKNOWN#</MCN></deviceDetails>
<deviceDetails><subscriberName>ABC</subscriberName><customerNumber>123</customerNumber><MCN>#UNKNOWN#</MCN></deviceDetails>
$
If your real input is much different, this may not work.
Hi,
Thanks for quick response.. Yes my actual input is quite big sometime it splitted into 50 lines and sometime its 10 lines only. The above command is giving correct o/p for the above example but its not working for the actual data..
Then post a sample of the actual input here...
Try:
awk '$1==s{f=1} $1=="/" s{f=0} f{gsub(/\n/,x)} NR>1{print RS $0}' RS=\< FS=\> ORS= s=deviceDetails file
Then post real data, edited for confidentiality if necessary. There's no point testing on a cleaned-up mockup.