![]() |
Hello and Welcome from United States to the UNIX and Linux Forums! Thank You for Visiting and Joining Our Global Community.
|
|
google unix.com
|
|||||||
| Forums | Register | Forum Rules | Links | Albums | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here. |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| ld: fatal: relocations remain against allocatable but non-writable sections | tdallagn | SUN Solaris | 0 | 05-21-2008 07:58 AM |
| extract multiple sections of a file | rgentis | UNIX for Advanced & Expert Users | 1 | 03-18-2008 08:40 PM |
| retrieved multiple lines on multiple places in a file | dala | Shell Programming and Scripting | 8 | 03-14-2008 03:28 PM |
| Handle Configuration File with same name of Parameter in multiple Sections | potro | Shell Programming and Scripting | 7 | 03-05-2008 11:36 AM |
| extract one file form .tar.gz without uncompressing .tar.gz file | balireddy_77 | Shell Programming and Scripting | 2 | 07-10-2007 04:23 AM |
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
|
|
||||
|
extract multiple sections of file
I have a file that I need to parse multiple sections from the file.
The file contains multiple lines that start with ST (Abunch of data) Then the file contains multiple lines that start with SE (Abunch of data) SE*30*0001 ST*810*0002 I need all of the lines between and including these. They are invoices. The invoice starts with the ST line and ends with the SE line. I need to break out all of the invoices into separate files. Can someone please help me. I know Grep, sed, or AWK can do this, but not sure how. Thank you Here is an example: ST*810*0001 BIG*20080315*1220680417**SUPPLY***DI N1*SF*MCLANE HIGH PLAINS*92*46120004 N1*ST*SWC 7-11 #57134*91*571315 N3*2712 E 8TH ST N4*ODESSA*TX*79761 REF*ST*000134 ITD*05*3*****7*****NET 7 IT1**1*CA*20.09**CB*649251*PI*093*UP*099299711018*RA*NA TXI*ZZ*1.53****2 CTP**RES*0***CSR*1 PID*F****7-11 T-SHIRT BAG 1/7 BBL PO4*1000 IT1**1*EA*33.72**CB*834861*PI*093*UP*012253022401*RA*NA TXI*ZZ*2.57****2 CTP**RES*0***CSR*1 PID*F****KIT CONCRETE CHAMP PO4*1 IT1**1*EA*0.03**CB*192849*PI*093*UP*000000192842*RA*NA CTP**RES*0***CSR*1 PID*F****SCS 711 BK 200 PO4*1 IT1**30*EA*2.59**CB*001511*PI*093*UP*025215102776*RA*NA CTP**RES*0***CSR*1 PID*F****MAXELL T-160 PLUS VIDEO PO4*1 TDS*18454 SAC*C*G740***5300*******06***SERVICE CTT*4 SE*30*0001 |
|
||||
|
Thank you for your prompt response.
It did what I wanted. However the three sections need to be parsed to to different files. So you have ST data SE This should be taken to file 1 ST data SE This should be taken to file 2 ETC..... Also I noticed that the ST and SE are numbered. ST*810*0004 Then SE*(Number)*0004 Thank you Last edited by rgentis; 03-18-2008 at 08:07 PM.. Reason: Added something |
|
||||
|
nawk 'BEGIN{n=1}
$0 ~ /^ST/ {f=1} $0 ~ /^SE/ {invoice[n]=sprintf("%s\n%s",invoice[n],$0);f=0;n=n+1} { if (f==1) invoice[n]=sprintf("%s\n%s",invoice[n],$0) } END{ for (i in invoice) print invoice[i] >> i close(i) }' filename |
|
||||
|
extract multiple sections of file
#-- Use ST values as output filename.
awk -v out="/dev/null" ' /^ST/ {gsub("\\*","-",$0); out=$0".txt"} /^SE/ { close(out) } { printf "%s\n",$0 >> out } ' $INFILE Output will be ST-810-0001.txt so on ... -Ramesh |
![]() |
| Bookmarks |
| Tags |
| linux, linux commands, solaris |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|