Attached is a streamed EDI ANSI X12 output where the segment terminator/delimiter is a tilde ~ character.
Is it possible to do the following pseudo-code in a unix script (using either sed, awk and/or grep)?
Open file StreamedOutput.txt
Search for ISA and delete the data up to the tilde ~ char
Search for GS and delete the data up to the tilde ~ char
And write the �middle' bit of data to the same filename.
In other words I want to strip off the first (ISA) and last segment (GS) of this file all up to the tilde and leave me the bit of data in the middle.
I tried to use the following script but not having much joy;
x=`grep -n "ISA" StreamedOutput | cut -d "~" -f1`
y=`grep -n "GS" StreamedOutput | cut -d "~" -f1`
a=`echo ${x} + 1 | bc`
b=`echo ${y} -1 | bc`
echo $x $y $a $b
sed -ne '${a},${b}p' StreamedOutput
If I unstreamed the input data it looks like;
ISA*HDR*START*US0050000013~
BA1*Y**A*US*0050000013***TNFederal Express~
YNQ*RZY~
YNQ*QQY~
DTM*274081015~
N1*EXSmith & Nephew, Inc.*24510123924RT~
N2*19013995343~
N3EAST HOLMES RD~
N4*Memphis*TN*38118US~
N1**CAREY STEVE~
N31720 EAST BLACKHAWK DR~
N4*PHOENIX*AZ*85024US~
N1*FWFederal Express24~
N3123 Main~
N4*MEMPHIS*TN**US~
L13*A*9021.10.0050***10*20****K*0Bone plates, screws & nails & other inte*OSD~
L13*A*9021.31.0000***10*1000****K*0Artificial joints & parts & accessories*OSF~
L13*A*9021.31.0000***10*1000****K*0Artificial joints & parts & accessories*OSD~
GS*TRL*END*US*0050000013~
And the result I want is;
BA1*Y**A*US*0050000013***TNFederal Express~
YNQ*RZY~
YNQ*QQY~
DTM*274081015~
N1*EXSmith & Nephew, Inc.*24510123924RT~
N2*19013995343~
N3EAST HOLMES RD~
N4*Memphis*TN*38118US~
N1CAREY STEVE~
N31720 EAST BLACKHAWK DR~
N4*PHOENIX*AZ*85024US~
N1*FWFederal Express24~
N3*123 Main~
N4*MEMPHIS*TNUS~
L13*A*9021.10.0050***10*20****K*0Bone plates, screws & nails & other inte*OSD~
L13*A*9021.31.0000***10*1000****K*0Artificial joints & parts & accessories*OSF~
L13*A*9021.31.0000***10*1000****K*0Artificial joints & parts & accessories*OSD~