Variablen bzw. Strings aus Logfiles lesen

D

davinci80

Mitglied
Hallo zusammen ich brauche wieder eure :help:

Aaalso,

mein Skript liest momentan bestimmte Variablen aus und schreibt sie in eine Datei; nix Wildes.
Aaaber, wie bringe ich dem Skript bei, dass wenn er eine bestimmte Variable herausliest dann soll er doch bitte an diese Variable Alles Weitere was dahinter ist auch auslesen, allerdings bis zu einem bestimmten String auslesen?

BEISPIEL.: Lese var1=a in Datei 'x' aus, sobald Du 'var1' findest lese Alles Weitere aber auch heraus was sich noch hinter der 'var1' auch befindet, jedoch nur bis zum Zeichen 'f'.

Skript:

array[1]=4FBTCP000400
array[2]=4FBTCP000500
array[3]=4FBCHK000520
array[4]=4FBNAV000050
array[5]=4FBNAV000092
array[6]=4FBCHK000512
array[7]=4FBNAV000060
array[8]=4FBNAV002200
array[9]=4FBNAV000090
array[10]=4FBCHK000611
array[11]=4FBCHK000612
array[12]=4FBNAV000092

echo "Bitte geben Sie den Dateinamen ein: "
read Dateiname
echo "Bitte geben Sie den Namen der Zieldatei ein: "
read Dateiname2

typeset -i i=1
while (( i <= 12 ))
do
zgrep ${array} $Dateiname >> $Dateiname2.csv
i=i+1
done
echo
echo "Die Logfileanalyse ist beendet. Das Ergebnis finden Sie in der Datei: $Dateiname2.csv"
echo

Vielen Dank!!!
 
Zuletzt bearbeitet:
Hallo
Das kannst du leicht mit sed erledigen.

Code:
sed -ne '/pattern1/,/pattern2/p' input
Schau mal in die Manpage von sed oder besuch eine der zahlreichen online HOWTO's zu sed:
Hier eines von vielen in deutsch:
http://www.tty1.net/sed-tutorium/html/

Gruß Wolfgang
 
Wo genau füge ich 'sed' im Skript ein?

Danke!
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

Hallo!

Wie wird in einem Shell-Skript eine "leere Zeile" definiert
z.Bsp.: lese solange aus der Datei xyz Alles heraus, bis eine leere Zeile in der Datei xyz auftauscht.
Dies würde ich gerne in folgende while-Schleife implementieren:

typeset -i i=1
while (( i <= 11 ))
do
zgrep ${array} $Dateiname
i=i+1
done
echo
echo "Die Logfileanalyse ist beendet. Das Ergebnis finden Sie in der Datei: $Dateiname2.csv"
echo
 
Zuletzt bearbeitet:
Warum erstellst du noch einen Thread?

Einmal genügt vollkommen.

Ein wenig Eigeninitiative ist hier auch nicht schlecht.

Ich habe dich auf sed hingewiesen, hast du den Link gelesen?

Gruß Wolfgang
 
sed

Ja, ich habe den Link mir angeschaut und auch Dinge ausprobiert!

Das Problem ist nur, ich weiß nicht genau wie ich es ambesten umsetzen kann.
Klar kann ich probieren, probieren und probieren, aber ich habe nicht die Zeit dafür weil es für meine Arbeit ist!

In folgendem Skript,

#!/bin/bash
# Skript zur Analyse eines FzG_Betriebsdatenupdates
# Das Skript dient ledeglich zur Analyse des tcpipserver_Logs der FgBZ.
# Zudem, werden die Ausgaben des Skriptes in eine gewünschte Datei umgelenkt.

array[1]=4FBTCP000400
array[2]=4FBTCP000500
array[3]=4FBCHK000520
array[4]=4FBNAV000050
array[5]=4FBNAV000092
array[6]=4FBCHK000512
array[7]=4FBNAV002200
array[8]=4FBNAV000090
array[9]=4FBCHK000611
array[10]=4FBCHK000612

echo "Bitte geben Sie den Dateinamen ein: "
read Dateiname
echo "Bitte geben Sie den Namen der Zieldatei ein: "
read Dateiname2

typeset -i i=1
while (( i <= 10 ))
do
zgrep ${array} $Dateiname >> $Dateiname2.csv
i=i+1
done
echo
echo "Die Logfileanalyse ist beendet. Das Ergebnis finden Sie in der Datei: $Dateiname2.csv"
echo "----------------------------------------------------------------------------------"
echo

sollen die o. g. Variablen bzw. arrays und was dahinter steht ausgelesen werden und in eine Datei (die der User angibt) umgelenkt werden.
Soweit funktioniert das Skript.
es gibt allerdings einen String der schaut so aus "4FBNAV000060" ab dem soll solange gelesen werden, bis dieser String "4FBTCP006520" im Logfile auftaucht. Zwischen diesen Beiden Strings (die immer am Anfang einer Zeile stehen) sollen die Einträge ausgelesen werden und in die Datei (siehe $Dateiname2.csv) umgelenkt werden.

gerne würde ich mich damit länger beschäftigen und alleine ausprobieren, aber ich habe einfach keine Zeit dafür; LEIDER! :(

Danke!!!

:help:
 
Hallo

Das ist doch nicht so kompliziert wie es aussieht.
Statt deinem zgrep pipe die Datei über zcat und sed in ein normales grep.

Code:
Statt
zgrep ${array[i]} $Dateiname >> $Dateiname2.csv

nun
zcat Datei.gz|sed -ne '/4FBNAV000060/;/4FBTCP006520/p' |grep ...
Allerdings geht das davon aus, dass die beiden Strings nur einmal vorkommen.

Die andere Variante steht in deinem anderen Thead.

Verwende eine Schleife und ein break, falls das Ende erreicht ist.

Gruß Wolfgang
PS 20€ von deinem Cheffe in die Boardkasse, für erledigte Arbeit. ;)
 
hmmm

Hi!

Vielen Dank für Deine Hilfe,
aber leider funktioniert es nicht.
Ich weiß, dass ich etwas falsch mache, aber ich weiß nicht was.

Wie gesagt, ich kenne mich zu wenig damit aus.
Werde es weiter alleine probieren.

Aber vielen vielen Dank! :))
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

Hi!

Habe festgestellt, dass dem System "zcat" Probleme bereitet.
Er sagt, "No such file or directory" obwohl alles da ist und mein Ursprungsskript funktioniert ohne Probleme.

Ich bin verzweifelt. ;(
 
Zuletzt bearbeitet:
Habe festgestellt, dass dem System "zcat" Probleme bereitet.
Er sagt, "No such file or directory" obwohl alles da ist und mein Ursprungsskript funktioniert ohne Probleme.

Ja, und wie soll dir mit dieser mageren Fehlerbeschreibung irgendjemand hier helfen können?

Ist das alles so schwer?
 
Hallo
Dann entzip die Datei vorher mit gzip und verwende cat.

Gruß Wolfgang
 
Es...

GEHT!!!!!!!!!! JAAAAAAAA!!!!
Da blöde Ding versteht gzcat! :D

THX!!!!!!!!!
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

Hallo zusammen,

mit welchem Befehl kann ich gleichzeitig in gezippten sowie nicht gezippten Datein nach Einträgen suchen?!

:)
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

Hallo zusammen,

mit welchem Befehl kann ich gleichzeitig in gezippten sowie nicht gezippten Datein nach bestimmten Einträgen suchen?!

In einem Verzeichnis sind gezippte und nicht gezippte Dateien
und es sollen alle vom Skript nach bestimmten Einträgen durchsucht werden.
Welchen Befehl nehme ich dafür, statt gzcat oder cat?!

*Bitte nicht antworten, dass ich doch die gezippten Dateien woanders hinkopieren soll, das ist so gewollt*

THX!!
 
Zuletzt bearbeitet:
Hallo
Dafür musst du dir schon eine Abfrage basteln.
Code:
TYP="$(file date|grep -o gzip )"

if [ -z "$TYP" ]
then
echo "kein gzip"
#command fuer text
else 
echo "File ist $TYP"
#command fuer gzpfile.
fi


BTW von welcher shell und welchem OS reden wir hier überhaupt?
Gruß Wolfgang
 
Huch!

Vielen Dank!

Irgendwie funktioniert das noch nicht so richtig, aber ich gebe mit Mühe! :-)

Übrigens, wofür steht das "grep -o"? Die grep-Referenz finde ich niergendswo...
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

Hallo!

Bei dem Kommando "grep -o" zeigt es mir folgende Ausgabe:

grep: illegal option -- o
Usage: grep -hblcnsviw pattern file . . .

kannst Du mir Wolfgang sagen, was die Ursache dafür ist?

Danke!!!
 
Zuletzt bearbeitet:
Ich denke am einfachsten ist immernoch:

# man zcat
...
-f --force
Force compression or decompression even if the file has multiple links or the corresponding file already
exists, or if the compressed data is read from or written to a terminal. If the input data is not in a for-
mat recognized by gzip, and if the option --stdout is also given, copy the input data without change to the
standard ouput: let zcat behave as cat. If -f is not given, and when not running in the background, gzip
prompts to verify whether an existing file should be overwritten.
...

Code:
fallout@server:~/temp> echo -e "eins\nzwei\ndrei" >text
fallout@server:~/temp> zcat text

zcat: text: not in gzip format
fallout@server:~/temp> zcat -f text
eins
zwei
drei

Gruß Daniel
 
Hallo
Obwohl du dich hartnäckig weigerst das OS und die Shell zu nennen, erwartest du dass wir das wissen sollen.

GNU grep -o besagt nur gefundenes Objekt ausgeben nicht die ganze Zeile
Wenn das dein grep nicht kennt, kannst du das auch weglassen und das Beispiel anpassen.

Wolfgang
BTW solltest du dich mal daum kümmern, wo sich die Manpages deines Systems befinden.
 

Ähnliche Themen

Last mit etc/passwd anzeigen lassen

NagiosGrapher 1.7.1 funktioniert nicht

Leerer Parameter in Funktion

Logfileanalyse-Skript

...bis zu einer leeren Zeile

Zurück
Oben