sonnenblen.de - Das unabhängige Sun User Forum
Software => Programmieren, Kompilieren => Thema gestartet von: uwe am 11. März 2009, 12:02:16
-
Hallo
Ich habe nachfolgende Problemstellung welche ich mittels script erkennen möchte.
- Es wird mehrmals täglich ein File erstellt welches Zeile für Zeile (up to 2000) informationen enthält die anschliessend an den IBM Hosts übermittelt werden.
- Es kann durch Fehleingabe vorkommen, dass eine Zeile dieses Files (Record) die maximal zulässige Anzahl Char (in meinem Fall 579) übersteigt was dazu führt, dass der Batch Job auf dem Host dann abbricht.
Ziel:
Ich möchte erkennen wenn eine Zeile dieses Files die maximale länge von 579 Char überschreitet.
ich habe dazu einen grep der das könnte, aber mir erscheint das nicht sehr effizient
grep -v '^............579 mal einen Punkt.......$' Filename
listet mir alle Zeilen auf welche mehr als 579 Char pro Zeile haben.
Frage:
Hat jemand eine Idee wie sich das besser realisieren lassen könnte?
Für eure Hilfe bereits besten Dank
Gruss Uwe
-
gibts fuer regexps nicht quantifizierer? Ich dachte schon.
guck mal hier: http://www.regenechsen.de/phpwcms/index.php?regex_allg_quant (http://www.regenechsen.de/phpwcms/index.php?regex_allg_quant)
Mfg. erisch
-
kann man mit nem kleinen script lösen...
while read LINE
do
echo $LINE | wc -c
done < $1
einfach das script aufrufen mit dem zu zählenden file als argument...
-
Moin,
Wenn es nur darum geht ob in der Eingabedatei (hier $FILENAME) eine Zeile zu lang ist:
if [ `cut -c579- $FILENAME | uniq | wc -l` != 1 ]; then
echo "Some line is too long or input file empty"
exit 1
fi
Tschau,
Drusus.
-
Als Filter:
nawk 'length <= 580'
blendet alle Zeilen aus, die einschließlich Newline länger als 580 Zeichen sind.
Rainer
-
Eigentlich wollte ich was Kluges sagen, aber Edith wies mich darauf hin, dass das Kluge wohl doch nicht sooo klug war ;)
gruss
Dominik
-
Hallo Leute
Besten Dank für die vielen Beiträge, mache mich gleich an die Arbeit und prüfe ob ich die Vorschläge umsetzen kann
Danke und Gruss
Uwe
-
Moin,
Wenn es nur darum geht ob in der Eingabedatei (hier $FILENAME) eine Zeile zu lang ist:
if [ `cut -c579- $FILENAME | uniq | wc -l` != 1 ]; then
echo "Some line is too long or input file empty"
exit 1
fi
Tschau,
Drusus.
Hallo Drusus
Kann ich auch eine Ausgabe der Zeile, welche betroffen ist, ausgeben?
mfg uwe
-
Moin,
Wenn es nur darum geht ob in der Eingabedatei (hier $FILENAME) eine Zeile zu lang ist:
if [ `cut -c579- $FILENAME | uniq | wc -l` != 1 ]; then
echo "Some line is too long or input file empty"
exit 1
fi
Ich würde das eher mit awk machen, da reicht ein Programm (statt drei) und man kann bei der ersten Zeile abbrechen, die zu lang ist:
if ! awk 'length > 579 {exit 1}' $FILENAME ; then
echo "Some line is too long"
exit 1
fi
Hallo Drusus
Kann ich auch eine Ausgabe der Zeile, welche betroffen ist, ausgeben?
mfg uwe
Einfach die aktuelle Zeile ausgeben, bevor du das Programm verläßt:
if awk 'length > 579 {print ; exit 1}' $FILENAME ; then
echo "Alles okay"
else
echo "Zeile zu lang!"
fi
MfG, Meik
-
Moin,
Wenn es nur darum geht ob in der Eingabedatei (hier $FILENAME) eine Zeile zu lang ist:
if [ `cut -c579- $FILENAME | uniq | wc -l` != 1 ]; then
echo "Some line is too long or input file empty"
exit 1
fi
Ich würde das eher mit awk machen, da reicht ein Programm (statt drei) und man kann bei der ersten Zeile abbrechen, die zu lang ist:
if ! awk 'length > 579 {exit 1}' $FILENAME ; then
echo "Some line is too long"
exit 1
fi
Hallo Drusus
Kann ich auch eine Ausgabe der Zeile, welche betroffen ist, ausgeben?
mfg uwe
Einfach die aktuelle Zeile ausgeben, bevor du das Programm verläßt:
if awk 'length > 579 {print ; exit 1}' $FILENAME ; then
echo "Alles okay"
else
echo "Zeile zu lang!"
fi
MfG, Meik
Hallo Meik
Beim vorgeschlagenen awk wäre es für mich sehr vorteilhaft wenn ich den output von print verwerten könnte (sms). Ich komme aber nicht dahinter wie ich das a) in ein file redirecten oder b) in eine variable umlenken könnte. Hast Du einen Vorschlag?
gruss uwe
-
Hallo Meik
Beim vorgeschlagenen awk wäre es für mich sehr vorteilhaft wenn ich den output von print verwerten könnte (sms). Ich komme aber nicht dahinter wie ich das a) in ein file redirecten oder b) in eine variable umlenken könnte. Hast Du einen Vorschlag?
gruss uwe
Backquotes, je nach Shell kann man das noch reichlich variieren:
line=`awk 'length > 579 {print ; exit 1}' $FILENAME`
if [ $? -ne 0 ] ; then
echo "Zeile zu lang: $line " | send_sms
fi
Das ist aber eigentlich das kleine Einmaleins der Shell-Programmierung. Vielleicht solltest du mal etwas Zeit und ein paar Euro in ein Buch zum Thema investieren. ;-)