HAllo !!!
Nun habe ich das script in die cron eingetragen und es funktioniert.
Wie kann man nun fest legen , dass nur fünf verschieden Nummern wichtig sind.
Eine liste anlegen ????
mfg
Rainer
HAllo !!!
Nun habe ich das script in die cron eingetragen und es funktioniert.
Wie kann man nun fest legen , dass nur fünf verschieden Nummern wichtig sind.
Eine liste anlegen ????
mfg
Rainer
Du hast ja jetzt die Zahl in der Variablen $NUMBER
Nun kannst du einfach ne Case-Abfrage machen:
Advanced Bash Scripting Guide: http://www.tldp.org/LDP/abs/html/testbranch.html#EX29Code:case "$person" in 1237 ) echo "ne 1237" 1239 ) echo "ne 1239" * ) echo "Was anderes" esac
lesenswert!
MfG Peschmä
The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)
Danke habe es getestet.
Wenn ich das Script ausführe list es die Textdatei durch und
schreibt mir was ergefunden hat.
Aber wenn ich es nochmals starten möchte geht es nicht mehr ???
Erst nach ca. 3 mal CTRL+C dann geht es wieder für einmal.
Was kann ich tun ????
Hier habe ich das mini Script.
#!/bin/bash
DATEI=/Entwicklung/Enterprise/inc.txt
for NUMBER in $(tail -f $DATEI | sed 's#.*M|--/--/-/---|=0:\([0-9]\{4\}\).*#\1#' <$DATEI); do
# echo $NUMBER ist aufgetaucht
# hier was tun
case "$NUMBER" in
"1237" ) echo "ne 1237";;
"2066" ) echo "2066";;
"2043" ) echo "2043";;
# "*" ) echo "Was anderes";;
esac
done
cat $DATEI >> $DATEI.old
mfg
Rainer
Habe den Fehler gefunden.
tail -f $DATEI | habe ich gelöscht dann gehts wieder.
Nun das nächste Problem :
Nach dem durchlaufen der Textdatei soll sich das Script merken
welche die letzte Zeile war.
Hier ein Auszug von der Textdatei.
05/03/04 11:15:06 001001M|--/--/-/---|=0:2043 =Los of the 6 CRYSTAL
05/03/04 11:15:06 001001M|--/--/-/---|=0:2063 =IPC
Das Datum und Uhrzeit ist eindeutig.
Wie kann man das jetzt machen , dass sich das Script merkt.
Dann beim nächste Durchlauf dort anfängt.
Also hier:
05/03/04 11:15:06 001001M|--/--/-/---|=0:2063 =IPC "Letzte Zeile"
05/03/04 11:15:16 001001M|--/--/-/---|=0:2043 =Los of the 6 CRYSTAL "neue Z."
05/03/04 11:22:06 001001M|--/--/-/---|=0:2063 =IPC
05/03/04 11:34:06 001001M|--/--/-/---|=0:2043 =Los of the 6 CRYSTAL
05/03/04 11:44:06 001001M|--/--/-/---|=0:2063 =IPC
mfg
Rainer
Diesbezüglich hab ich ja schon ne Lösung vorgeschlagen.
Könntest wenigstens sagen wieso das nicht praktikabel ist
MfG Peschmä
The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)
Sorry !!!
Dann habe ich die Lösung nicht richtig verstanden.
Was muß ich in das Script einfügen , so daß das Datum der letzten Zeile
ausgegeben wird ???
äh, jetzt komme ich nicht mehr ganz mit. Du möchtest, dass die letzte der bearbeiteten Zeilen nochmal bearbeitet wird?
Da ja immer neue Einträge hinzukommen können wird die Inputdatei zuerst nach inc.txt.new verschoben. Mit dieser Datei wird dann gearbeitet. Am Ende kommt dann der Inhalt nach inc.txt.old (dort sammeln sich dann alle bearbeiteten Einträge an)Code:#!/bin/bash numberWork() { case "$1" in "1237" ) echo "ne 1237";; "2066" ) echo "2066";; "2043" ) echo "2043";; # "*" ) echo "Was anderes";; esac } DATEI=/Entwicklung/Enterprise/inc.txt WORK=$DATEI.work mv $DATEI $WORK touch $DATEI #letzter (schon bearbeiteter) Eintrag nochmal numberWork $(tail -1 numberWork | $(sed 's#.*M|--/--/-/---|=0:\([0-9]\{4\}\).*#\1#')) for NUMBER in $(sed 's#.*M|--/--/-/---|=0:\([0-9]\{4\}\).*#\1#' <$WORK); do numberWork $NUMBER done cat $WORK >> $DATEI.old rm $WORK
inc.txt enthält jeweils nur die noch nicht bearbeiteten Einträge.
MfG Peschmä
The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)
Hallo !!!
Ich glaube wir haben an einander vorbei geredet.
Also mein Script schaut so aus:
#!/bin/bash
DATEI=/Entwicklung/Enterprise/inc.txt
for NUMBER in $(sed 's#.*M|--/--/-/---|=0:\([0-9]\{4\}\).*#\1#' <$DATEI); do
# Test Datei inc.txt
#
# 05/03/04 11:15:06 001001M|--/--/-/---|=0:2043 =Los of the 6 CRYSTAL
# 05/03/04 11:25:06 001001M|--/--/-/---|=0:2063 =IPC
# 05/03/04 11:35:06 001001M|--/--/-/---|=0:2044 =Los of the 6 CRYSTAL
# 05/03/04 11:45:06 001001M|--/--/-/---|=0:2066=IPC
# 05/03/04 11:55:06 001001M|--/--/-/---|=0:2047 =Los of the 6 CRYSTAL
# 05/03/04 12:15:06 001001M|--/--/-/---|=0:2067 =IPC
#
case "$NUMBER" in
"1123" ) echo "1123";;
"2066" ) echo "2066";;
"2043" ) echo "2043";;
# "*" ) echo "Was anderes";;
esac
done
cat $DATEI >> $DATEI.old
exit 0
Der Eintrag mit tail funktioniert nicht ???
for NUMBER in $(tail -f $DATEI | sed 's#.*M|--/--/-/---|=0:\([0-9]\{4\}\).*#\1#' <$DATEI); do
Da war nun meine Frage ,weil tail nicht geht , muss ja das Script immer gestartet werden.
Dann sucht das Script wieder die inc.txt durch von forne.
Dass das nicht passiert , sollte die letzte Zeile das Datum merken , dann beim
nächstenmal da wieder anfangen bei der nächsten Zeile.
Heute habe ich jemanden gesprochen der meinte das wäre zu umständlich.
Warum würde ich nicht die Zeilen zählen und weg schreiben die Anzahl.
Dann beim nächsten öffnen der inc.txt das weggeschriebene wieder holen und
bei der neuesten Zeile wieder anfangen . u.s.w
Was meint ihr zu diesem Vorschlag ????
mfg
Rainer
Ok. Meine Lösung ist immer noch dieselbe.
inc.txt wird verarbeitet. Dann wird der Inhalt in inc.txt.old angehängt und aus inc.txt gelöscht.
Um mehr Sicherheit zu erreichen (damit wenn ein Eintrag während des Bearbeitens hinzukommt, der trotzdem nicht unbearbeitet nach inc.txt.old wandert) wird die Datei vor dem Bearbeiten nach inc.txt.work verschoben - neue Einträge kommen dann nach inc.txt, bearbeitet wird inc.txt.work und der Inhalt landet dann in inc.txt.old
MfG PeschmäCode:#!/bin/bash DATEI=/Entwicklung/Enterprise/inc.txt WORK=$DATEI.work mv $DATEI $WORK touch $DATEI for NUMBER in $(sed 's#.*M|--/--/-/---|=0:\([0-9]\{4\}\).*#\1#' <$WORK); do case "$NUMBER" in "1237" ) echo "ne 1237";; "2066" ) echo "2066";; "2043" ) echo "2043";; # "*" ) echo "Was anderes";; esac done cat $WORK >> $DATEI.old rm $WORK
The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)
Verstanden.
Was du nicht weißt ,die Datei inc.txt darf ich nicht den Inhalt gelöscht werden.
Weil dies , die Error LOG Datei vom System ist.
Da können andere Routinen ja nicht mehr zu greifen.
mfg
Rainer
Endlich.
Das hab ich jetzt schon etwa dreimal gefragt.
Naja. Dann musst du halt Zeilen zählen, da das Tail offenbar nicht so will.
MfG Peschmä
The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)
Tut mir leid wenn ich die Fragen nicht so verstanden habe.
Wie kann ich jetzt die Zeilen zählen ?
Habe keine blassen Dunst ???
mfg
Rainer
Ok. Ich habs nicht direkt so gefragt - aber in meinen Beispielscripts wars so drin.
http://www.tldp.org/LDP/abs/html/ hilft dir sicher weiter.
Vermutlich kriegst du das aber einfacher mit dem Programm "watch" hin. Das wird dort nur ganz am Rande erwähnt, ich habs gesehen, als ich nach "tail -f" und Kommando ausführen suchte
MfG Peschmä
The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)
oder falls das nicht geht mit diff und ner Dateikopie.
MfG Peschmä
The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)
Lesezeichen