![]() |
|
|
Google unix.com
|
|||||||
| Foren | Registrieren | Forum-Regeln | Links | Alben | FAQ | Benutzerliste | Kalender | Suche | Die heutige Beiträge | Alle Foren als gelesen markieren |
| 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 |
| Append Header und Trailer | balzzz | UNIX for Dummies Questions & Answers | 2 | 01-06-2008 08:19 AM |
| Überprüfung der Kopf-und Anhänger für eine Zeichenkette, und wenn nicht gefunden, Ausfahrt aus dem | er_ashu | UNIX for Dummies Questions & Answers | 2 | 11-08-2007 09:55 AM |
| Kopieren Sie alle Dateien mit Zeitstempel und entfernen Kopf, Anhänger aus der Datei | ksrams | UNIX for Dummies Questions & Answers | 35 | 07-30-2007 03:15 PM |
| Nr. Anzahl der Datensätze in Datei ohne Header und Trailer Records | guiguy | Shell Programmierung und Scripting | 2 | 06-07-2007 01:15 PM |
| Kombination von zwei Text-Dateien | d3ck_tm | AIX | 6 | 02-28-2006 11:23 PM |
![]() |
|
|
LinkBack | Thread Tools | Suche diesen Thread | Rate Thread | Anzeige-Modi |
|
|
|
||||
|
Merge-Text-Dateien, während die Kombination mehrerer Header / Trailer Datensätze in jeweils einer.
Lage:
Unser System führt derzeit einen Job (COBOL-Programm), das ein Interface-Datei, die an einem unserer Lieferanten. Da dieses System verarbeitet Informationen für mehr als 100.000 Mitarbeiter / Rentner (Tendenz steigend), wir möchten Multi-Thread-Verarbeitung in der Job-Gruppen, um seine Laufzeit. Dies funktioniert gut, jedoch sind wir mit mehreren Interface-Dateien, die zusammengeführt werden vor der Übertragung an den Anbieter. Einige Details über die Datei: Die Datei hat einen Kopf und einem Anhänger mit einer Aufnahme, und die Anhänger Datensatz entsprechenden Werte insgesamt (dh Arbeitnehmer zählen, Aufzeichnungen zugelassen, etc.). Es gibt keine Feld-Separatoren - das sind feste Länge Felder aus. Predicament im Detail: Wir möchten Zusammenfügen der Dateien - das ist der einfache Teil. Was macht diese schwierig ist, die wir brauchen, um die mehrere Header-Einträge und behält nur die erste. Auch wir brauchen, um die Anhänger mehrere Einträge, aber wir brauchen, um alle den Wert Summen von jedem Anhänger in der Anhänger-Datensatz wir behalten am Ende. Wie Sie vielleicht ahnen nun, ich habe einige UNIX-Skripte, doch einige wichtige Erkenntnisse in Bezug auf individuelle und Manipulation Bereich innerhalb einer Textdatei. Insbesondere würde ich gerne wissen, wie kann ich bestimmte Felder, wenn ich lese jeden Datensatz - das sind die Felder für die Anhänger Aufzeichnungen Ich brauche, um einen fortlaufenden insgesamt auf. Also, ich würde gerne wissen, wie kann ich Löschen einzelner Datensätze. Jede Hilfe wird sehr geschätzt. |
|
||||
|
Beispiel-Datei
Zitat:
CHARGENFREIGABE HEADER PRO 0724200808042008 01E000036841 LEAD05151948F 51498 10012007 YYY 02E000036841 ME 04161988F 10012007 01E000060640 MDGV12251951F 51498 1001200709302008YYY 02E000060640 RD 05061941M 1001200709302008 01E000025850 LDUO06081956F 51498 1001200709302008YYY 02E000025850 ED 10071937M 1001200709302008 01E029009859 DUA05021960F 51498 10012007 YYY 02E029009859 LD 03101989F 10012007 02E029009859 LD 02041997M 10012007 01E034008379 AEUA09181965F 51498 10012007 YYY 02E034008379 NE 11131991F 10012007 02E034008379 RE 01131993F 10012007 02E034008379 EE 09191959M 10012007 01E045005523 EUA02131964M 51498 10012007 YNN 01E046004280 DUA12041947M 51498 10012007 YYY 02E046004280 D 12121953F 10012007 02E046004280 KE 09211986M 10012007 01E048005119 BDUA01301961F 51498 10012007 YNN 01E055002147 LDUA10011964F 51498 10012007 YYY 02E055002147 RD 11121966M 10012007 02E055002147 ND 02131997F 10012007 02E055002147 JD 03111992M 10012007 01E057008796 SEUA12061975F 51498 10012007 YYY CHARGENFREIGABE TRAILER 000001150000019908042008 Details zu den Trailer Record: 00000115 ist der Gesamtwert (Anzahl der Mitarbeiter), die 00000199 ist die Summe der Datensätze verarbeitet werden (Mitarbeiter und Angehörige). Diese beiden Bereiche würde ich brauchen, um einen fortlaufenden insgesamt für alle Dateien zusammenführen. Die Details werden über 300 Zeichen breit (irrelevant für das, was wir tun müssen, aber ich dachte, es). Danke! |
|
||||
|
Angenommen, die: 01E000036841 ist ein Mitarbeiter-ID und die Dateien namens <irgendwas>. dat
Code:
ls *.dat | read header dummy
# save copies of header
head -1 $header > tmp
awk '{ if (index($0, "HEADER") > 0 || index($0, "TRAILER") >0 ) {last= $0; continue}
arr[$0]++; print $0 }
END { for (i in arr)
{
empcnt++
lc+=arr[i]
}
print empcnt, lc > "cntfile" } ' *.dat >> tmp
awk ' { rec=sprintf("%08d%08d", $1 $2)}
END { printf("BATCH TRAILER %s%s\n", rec, substr(last, length(last)-7) } ' cntfile >> tmp
mv tmp employee.dat
|
|
||||
|
hi unten perl können Sie ein wenig
Nutzung: perl a.pl NUM datei1 datei2 [NUM hier angeben, wie viele Zeilen werden header] Code:
a: ***** line 1 line 2 1 2 3 4 5 Code:
b: ***** line 3 line 4 9 8 7 6 5 Code:
***** line 1 line 2 line 3 line 4 10 10 10 10 10 Code:
$header=shift;
undef $/;
my(@head,@body,@foot);
while($file=shift){
open FH,"<$file" or die "Can not open file $_";
my $str=<FH>;
close FH;
my @temp=split("\n",$str);
for( my $i=0;$i<$header;$i++){
push @head,$temp[$i] if ($#head<$header-1);
}
for(my $j=$header;$j<$#temp;$j++){
push @body,$temp[$j];
}
my @footer = split(" ",$temp[$#temp]);
for($k=0;$k<=$#footer;$k++){
$foot[$k]=$foot[$k]+$footer[$k];
}
}
print join "\n",@head;
print "\n",join "\n",@body;
print "\n",join " ",@foot;
|
![]() |
| Lesezeichen |
| Tags |
| perl, perl Verschiebung, Schicht, Verlagerung perl |
| Thread Tools | Suche diesen Thread |
| Anzeige-Modi | Rate this thread |
|
|