![]() |
|
|
|
|
|||||||
| Forums | Portal | Register | Rules & FAQ | Contribute | Members List | Arcade | 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 here. |
|
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| ld: fatal: relocations remain against allocatable but non-writable sections | tdallagn | SUN Solaris | 0 | 05-21-2008 04:58 AM |
| extract multiple sections of a file | rgentis | UNIX for Advanced & Expert Users | 1 | 03-18-2008 04:40 PM |
| retrieved multiple lines on multiple places in a file | dala | Shell Programming and Scripting | 8 | 03-14-2008 11:28 AM |
| Handle Configuration File with same name of Parameter in multiple Sections | potro | Shell Programming and Scripting | 7 | 03-05-2008 07:36 AM |
| extract one file form .tar.gz without uncompressing .tar.gz file | balireddy_77 | Shell Programming and Scripting | 2 | 07-10-2007 01:23 AM |
|
|
LinkBack | Thread Tools | 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 |
| Forum Sponsor | ||
|
|
|
|||
|
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 04:07 PM. Reason: Added something |
|
|||
|
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 |
|
|||
|
I wanted to thank all of you for your response.
One issue, I am porting the awk utility to windows. So I do not think all of the functionality is there. For instance when I used Ramesh's example, I received numerous errors. Here is the code: c:\tools\gnuwin32\bin\awk -v '/^ST/ {gsub("\\*","-",$0); out=$0".txt"} /^SE/ { close(out) } { printf "%s\n",$0 >> out } ' %input%edifile.dat Here is the result: awk: `/ST/' argument to `-v' not in `var=value' form Usage: awk [POSIX or GNU style options] -f progfile [--] file . Usage: awk [POSIX or GNU style options] [--] 'program' file ... POSIX options: GNU long options: -f progfile --file=progfile -F fs --field-separator=fs -v var=val --assign=var=val -m[fr] val -W compat --compat -W copyleft --copyleft -W copyright --copyright -W dump-variables[=file] --dump-variables[=file] -W exec=file --exec=file -W gen-po --gen-po -W help --help -W lint[=fatal] --lint[=fatal] -W lint-old --lint-old -W non-decimal-data --non-decimal-data -W profile[=file] --profile[=file] -W posix --posix -W re-interval --re-interval -W source=program-text --source=program-text -W traditional --traditional -W usage --usage -W use-lc-numeric --use-lc-numeric -W version --version To report bugs, see node `Bugs' in `gawk.info', which is section `Reporting Problems and Bugs' in the printed version. gawk is a pattern scanning and processing language. By default it reads standard input and writes standard output. Examples: gawk '{ sum += $1 }; END { print sum }' file gawk -F: '{ print $1 }' /etc/passwd '/SE/' is not recognized as an internal or external command, operable program or batch file. '{' is not recognized as an internal or external command, operable program or batch file. ''' is not recognized as an internal or external command, operable program or batch file. C:\tools>edi awk: `'/ST/' argument to `-v' not in `var=value' form Usage: awk [POSIX or GNU style options] -f progfile [--] file . Usage: awk [POSIX or GNU style options] [--] 'program' file ... POSIX options: GNU long options: -f progfile --file=progfile -F fs --field-separator=fs -v var=val --assign=var=val -m[fr] val -W compat --compat -W copyleft --copyleft -W copyright --copyright -W dump-variables[=file] --dump-variables[=file] -W exec=file --exec=file -W gen-po --gen-po -W help --help -W lint[=fatal] --lint[=fatal] -W lint-old --lint-old -W non-decimal-data --non-decimal-data -W profile[=file] --profile[=file] -W posix --posix -W re-interval --re-interval -W source=program-text --source=program-text -W traditional --traditional -W usage --usage -W use-lc-numeric --use-lc-numeric -W version --version To report bugs, see node `Bugs' in `gawk.info', which is section `Reporting Problems and Bugs' in the printed version. gawk is a pattern scanning and processing language. By default it reads standard input and writes standard output. Examples: gawk '{ sum += $1 }; END { print sum }' file gawk -F: '{ print $1 }' /etc/passwd '/SE/' is not recognized as an internal or external command, operable program or batch file. '{' is not recognized as an internal or external command, operable program or batch file. ''' is not recognized as an internal or external command, operable program or batch file. Thank you again for your help. |
|||
| Google UNIX.COM |