The UNIX and Linux Forums  
Hallo und herzlich Willkommen aus den Vereinigten Staaten, die UNIX-und Linux-Foren! Vielen Dank für Ihren Besuch und die Teilnahme an unserem Global Community.

Go Back   Die UNIX-und Linux-Foren > Top Foren > Shell Programmierung und Scripting
.
Google unix.com



Shell Programmierung und Scripting Post Fragen zu ksh, csh, sh, bash, Perl, PHP, sed, awk und anderen Shell-Skripte und Shell-Scripting-Sprachen hier.

Mehr UNIX-und Linux-Forum Themen Vielleicht finden Sie hilfreiche
Faden Thread Starter Forum Antworten Last Post
ld: fatal: Standortverlagerungen bleiben gegen zuordenbaren aber nicht schreibbar Abschnitte tdallagn SUN Solaris 0 05-21-2008 07:58 AM
Auszug mehrere Teile einer Datei rgentis UNIX für Fortgeschrittene und Experten 1 03-18-2008 08:40 PM
abgerufen werden mehrere Zeilen auf mehreren Plätzen in eine Datei dala Shell Programmierung und Scripting 8 03-14-2008 03:28 PM
Griff Konfigurations-Datei mit dem gleichen Namen der Parameter in mehrere Abschnitte Potro Shell Programmierung und Scripting 7 03-05-2008 11:36 AM
Auszug einer Datei aus. tar.gz ohne Dekomprimieren. tar.gz-Datei balireddy_77 Shell Programmierung und Scripting 2 07-10-2007 04:23 AM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Suche diesen Thread Rate Thread Anzeige-Modi
  #1 (permalink)  
Old 03-18-2008
rgentis rgentis is offline
Registrierte Nutzer
  
 

Join Date: März 2008
Beiträge: 4
Extrakt mehrere Abschnitte der Datei

Ich habe eine Datei, die ich zu analysieren mehrere Abschnitte aus der Datei.

Die Datei enthält mehrere Zeilen, die mit ST (Abunch von Daten)
Dann wird die Datei enthält mehrere Zeilen, die mit SE (Abunch von Daten)

SE * 30 * 0001
ST * 810 * 0002

Ich benötige alle der Linien zwischen den und auch diese.
Sie sind Rechnungen.
Die Rechnung beginnt mit der ST-Linie und endet mit der SE-Linie.

Ich brauche, um all die Rechnungen in separaten Dateien.

Kann jemand bitte helfen Sie mir. Ich weiß, Grep, sedOder AWK können dies tun, aber nicht sicher, wie.
Danke


Hier ist ein Beispiel:
ST * 810 * 0001
BIG * 20080315 * 1220680417 ** LIEFERUNG *** DI
N1 * SF * McLane Hochebene * 92 * 46120004
N1 * ST * SWC 7-11 # 57134 * 91 * 571315
N3 * 2712 E 8. ST
N4 ODESSA * * * TX 79761
REF * ST * 000134
ITD * 05 * 3 ***** 7 ***** netto 7
IT1 ** 1 * CA * 20/09 * 649251 ** CB * 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 * * 2,59 ** EA 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
  #2 (permalink)  
Old 03-18-2008
Shamrock shamrock is offline Forum Advisor  
Registrierte Nutzer
  
 

Join Date: Oct 2007
Ort: USA
Beiträge: 750
Code:
awk '/^ST/,/^SE/' file
  #3 (permalink)  
Old 03-18-2008
rgentis rgentis is offline
Registrierte Nutzer
  
 

Join Date: März 2008
Beiträge: 4
Vielen Dank für Ihre prompte Antwort.

Er tat, was ich wollte. Doch die drei Abschnitte müssen analysiert werden, um auf verschiedene Dateien.

So haben Sie
ST
Daten
SE
Diese sollten ergriffen werden, um Datei 1
ST
Daten
SE
Diese sollten ergriffen werden, um Datei 2

ETC .....

Auch habe ich festgestellt, dass die ST und SE sind nummeriert.

ST * 810 * 0004
Dann
SE * (Anzahl) * 0004
Danke

Zuletzt bearbeitet von rgentis; am 03-18-2008 08:07 PM.. Grund: etwas hinzugefügt
  #4 (permalink)  
Old 03-18-2008
summer_cherry summer_cherry is offline Forum Advisor  
Registrierte Nutzer
  
 

Join Date: Jun 2007
Ort: Peking, China
Posts: 1088
nawk 'BEGIN (n \u003d 1)
$ 0 ~ / ^ ST / f \u003d (1)
$ 0 ~ / ^ SE / (Rechnung [n] \u003d sprintf ( "% s \ n% s", Rechnung [n], $ 0), f \u003d 0, n \u003d n +1)
(
if (f \u003d\u003d 1)
Rechnung [n] \u003d sprintf ( "% s \ n% s", Rechnung [n], $ 0)
)
END (
for (i in Rechnung)
print Rechnung [i]>> i
close (i)
) 'Filename
  #5 (permalink)  
Old 03-18-2008
drl's Avatar
DRL drl is offline Forum Advisor  
Registrierte Nutzer
  
 

Join Date: Apr 2007
Ort: Saint Paul, MN USA / BSD, CentOS, Debian, OS X, Solaris
Beiträge: 711
Hi.

Eine alternative Lösung awk:
Code:
#!/usr/bin/env sh

# @(#) s1       Demonstrate extraction of range to separate files.

#  ____
# /
# |   Infrastructure BEGIN

echo
set -o nounset

debug=":"
debug="echo"

## The shebang using "env" line is designed for portability. For
#  higher security, use:
#
#  #!/bin/sh -

## Use local command version for the commands in this demonstration.

set +o nounset
echo "(Versions displayed with local utility \"version\")"
version >/dev/null 2>&1 && version =o $(_eat $0 $1) awk my-nl
set -o nounset

# Use nawk or /usr/xpg4/bin/awk on Solaris.

echo

FILE=${1-data1}
echo " Input file $FILE:"
cat $FILE

# |   Infrastructure END
# \
#  ---

echo
echo " Results from processing:"
awk '
BEGIN   { i = 0 }
/ST/            { i++ ; name = "file" i }
/ST/,/SE/       { print > name }
' $FILE

my-nl file?

exit 0
Herstellung:
Code:
% ./s1

(Versions displayed with local utility "version")
Linux 2.6.11-x1
GNU bash, version 2.05b.0(1)-release (i386-pc-linux-gnu)
GNU Awk 3.1.4
my-nl (local) 296

 Input file data1:
ST
first invoice
SE
ST
second invoice
SE
ST
third invoice
SE

 Results from processing:

==> file1 <==

  1 ST
  2 first invoice
  3 SE

==> file2 <==

  1 ST
  2 second invoice
  3 SE

==> file3 <==

  1 ST
  2 third invoice
  3 SE
Wählen Sie den Basis-Dateinamen Sie in der Variablen "Name" ... cheers, DRL
  #6 (permalink)  
Old 03-19-2008
faltooweb faltooweb is offline
Registrierte Nutzer
  
 

Join Date: Jan 2008
Beiträge: 11
Extrakt mehrere Abschnitte der Datei

# - Verwenden Sie Werte wie ST Ausgabedatei.
awk-v out \u003d "/ dev / null"
/ ^ ST / (gsub ( "\ \ *","-",$ 0); out \u003d $ 0". Txt ")
/ ^ SE / (close (out))
(Printf "% s \ n", $ 0>> aus)
'$ INFILE

Leistung wird
ST-810-0001.txt
so weiter ...

-Ramesh
Closed Thread

Lesezeichen

Tags
Linux, Linux-Befehle, solaris

Thread Tools Suche diesen Thread
Suche diesen Thread:

Erweiterte Suche
Anzeige-Modi Rate this thread
Rate this thread:

Forumregeln
Du möglicherweise nicht neue Themen
Du möglicherweise nicht nach Antworten
Du möglicherweise nicht post-Anlagen
Du möglicherweise nicht bearbeiten Sie Ihre Beiträge

BB-Code ist Auf
Smilies sind Auf
[IMG] Code Auf
HTML-Code ist Aus
Trackbacks sind Auf
Pingbacks sind Auf
Refbacks sind Auf




Alle Zeiten sind GMT -4. Es ist jetzt 12:05 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Ltd. Sprachliche Übersetzungen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Die UNIX-und Linux-Foren Content © Copyright 1993-2009. Alle Rechte Reserved.Ad Management von RedTyger

Content Relevant URLs durch vBSEO 3.2.0