edv:os:unix:shell:example:zeilenfilter
Zeilenfilter
In Textfiles/Zeilen Zeichen ersetzen/aufbereiten.
Nehmen wir als Beispiel ein Unload-File, das mehrere DTAUS-Dateien beinhaltet, durch Zeilenende-Zeichen getrennt. Ein zusätzliches '|'-Trennzeichen am Ende jeder Zeile (z.B. von dbaccess als Feldtrenner beim Unload hinzugefügt).
Bevor die DTAUS-Dateien nach dem Entladen aus der DB bearbeitet werden können, müssen diese aufbereitet werden, beispielsweise wie folgt:
- Sonderzeichen, die vom dbaccess durch '\'-Zeichen "escaped" werden ('\' selbst und '|'), bereinigen;
- Nicht DTAUS konforme Zeichen durch Blanks ersetzen;
- Kleinbuchstaben zu Großbuchstaben konvertieren;
All diese Aufgaben erledigt folgendes perl-Aufruf:
/usr/bin/perl -e 'while( <STDIN> ) { chomp ; $outBuf = $_ ; $outBuf =~ s/\\\\/ /g; $outBuf =~ s/\\\|/ /g; $outBuf =~ s/[^ A-Za-z0-9\.\,\-\+\*\%\/\$\&]/ /g; $outBuf =~ s/ $/|/g; $outBuf = uc($outBuf); print STDOUT "$outBuf\n"; }' < ${INPUT_UNLOADS_DTAUS_FILES} 1>${OUTPUT_DTAUS_FILE} 2>${OUTPUT_ERROR_MELDUNGEN}
Erläuterung:
- Das Kommando
$outBuf = $_ ;
liest eine Zeile aus dem Input-Stream<STDIN>
- Kommandos
$outBuf =~ s/\\\\/ /g;
und$outBuf =~ s/\\\|/ /g;
ersetzen das doppelte '\'-Zeichen ('\\') bzw. das escaped '|'-Zeichen ('\|') durch Blanks - Das Kommando
$outBuf =~ s/[^ A-Za-z0-9\.\,\-\+\*\%\/\$\&]/ /g;
ersetzt alle Zeichen, die in diesem Kommando nicht erwähnt sind (Invertierung durch das '^'-Zeichen vorne) durch Blanks - Das Kommando
$outBuf =~ s/ $/|/g;
fügt am Ende jeder Zeile wieder ein '|'-Zeichen hinzu - Das Kommando
$outBuf = uc($outBuf);
konvertiert alle Kleinbuchstaben zu Großbuchstaben - Das Kommando
print STDOUT "$outBuf\n";
schreibt die fertige Zeile gefolgt vom Zeilentrenner auf 'stdout' raus
Stand: 01.04.2011
EOF
edv/os/unix/shell/example/zeilenfilter.txt · Zuletzt geändert: 2020/01/11 01:23 von 127.0.0.1