Benutzer-Werkzeuge

Webseiten-Werkzeuge


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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki