Mit einen Shell script bestimmte Werte aus einer Datei auslesen
Hallo, ich möchte aus einer log Datei bestimmte Wert mit Hilfe eines Linux Scriptes auslesen, die ich dann in eine andere Datei schreibe, von wo sie weiter verarbeitet werden soll.
Hallo ich habe ein Prog. was täglich läuft und mir eine log. Datei schreibt. In dieser Log Datei stehen unter anderen einige Werte die ich weiterverarbeiten will.
Die folgenden Zeilen befinden sich in der log Datei und nur die will ich auslesen. Ich will die verbrauchte Zeit der Aufrufe auswerten.
10759' 'OTHERS '-Aufrufe benötigten '0:572.921.999' Sek.
10273' 'SELECT '-Aufrufe benötigten '8:787.561.000' Sek.
2' 'EXECUTE '-Aufrufe benötigten '3:993.116.999' Sek.
0' 'UPDATE '-Aufrufe benötigten '0:000.000.000' Sek.
0' 'DELETE '-Aufrufe benötigten '0:000.000.000' Sek.
0' 'INSERT '-Aufrufe benötigten '0:000.000.000' Sek.
153248' 'READ '-Aufrufe benötigten '7:818.841.000' Sek.
10907' 'CLOSESTMT '-Aufrufe benötigten '0:400.665.999' Sek.
233' 'TRANSACT '-Aufrufe benötigten '0:013.992.999' Sek.
Größter Zeitverbrauch bei einem DB-Aufruf war: '60:278.984.000'.
Datenbank geschlossen, Zeitverbrauch komplett: '476:498.166.000' Sekunden.
Nur diese Zeilen brauche ich nur aus der Logdatei.
Kann mir jemand vielleicht einen Lösungsansatz geben
Gruß Tommhii
Hallo ich habe ein Prog. was täglich läuft und mir eine log. Datei schreibt. In dieser Log Datei stehen unter anderen einige Werte die ich weiterverarbeiten will.
Die folgenden Zeilen befinden sich in der log Datei und nur die will ich auslesen. Ich will die verbrauchte Zeit der Aufrufe auswerten.
10759' 'OTHERS '-Aufrufe benötigten '0:572.921.999' Sek.
10273' 'SELECT '-Aufrufe benötigten '8:787.561.000' Sek.
2' 'EXECUTE '-Aufrufe benötigten '3:993.116.999' Sek.
0' 'UPDATE '-Aufrufe benötigten '0:000.000.000' Sek.
0' 'DELETE '-Aufrufe benötigten '0:000.000.000' Sek.
0' 'INSERT '-Aufrufe benötigten '0:000.000.000' Sek.
153248' 'READ '-Aufrufe benötigten '7:818.841.000' Sek.
10907' 'CLOSESTMT '-Aufrufe benötigten '0:400.665.999' Sek.
233' 'TRANSACT '-Aufrufe benötigten '0:013.992.999' Sek.
Größter Zeitverbrauch bei einem DB-Aufruf war: '60:278.984.000'.
Datenbank geschlossen, Zeitverbrauch komplett: '476:498.166.000' Sekunden.
Nur diese Zeilen brauche ich nur aus der Logdatei.
Kann mir jemand vielleicht einen Lösungsansatz geben
Gruß Tommhii
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 178998
Url: https://administrator.de/forum/mit-einen-shell-script-bestimmte-werte-aus-einer-datei-auslesen-178998.html
Ausgedruckt am: 23.12.2024 um 05:12 Uhr
6 Kommentare
Neuester Kommentar
Hallo Tommhii,
wie meinst du das genau?
Möchtest du aus den obigen Zeilen die Sekunden extrahieren?
Sowas ließe sich dann in batch mit "tokens" und "delims" lösen: z.B.
Das würde bei deinen geposteten Zeilen dann folgende Ausgabe liefern:
Für die letzten beiden Zeilen (davon ausgehend das der Aufbau immer gleich ist) müsste man dies natürlich entsprechend anpassen.
Oder willst du was ganz anderes und möchtest innerhalb einer größeren log-Datei die Zeilen herausfiltern, die oben genannte Angaben enthalten?
Gruß
LumenAlbum
wie meinst du das genau?
Möchtest du aus den obigen Zeilen die Sekunden extrahieren?
Sowas ließe sich dann in batch mit "tokens" und "delims" lösen: z.B.
for /f "tokens=5 delims='" %%i in (temp.log) do @ECHO %%i
Das würde bei deinen geposteten Zeilen dann folgende Ausgabe liefern:
0:572.921.999
8:787.561.000
3:993.116.999
0:000.000.000
0:000.000.000
0:000.000.000
7:818.841.000
0:400.665.999
0:013.992.999
8:787.561.000
3:993.116.999
0:000.000.000
0:000.000.000
0:000.000.000
7:818.841.000
0:400.665.999
0:013.992.999
Für die letzten beiden Zeilen (davon ausgehend das der Aufbau immer gleich ist) müsste man dies natürlich entsprechend anpassen.
Oder willst du was ganz anderes und möchtest innerhalb einer größeren log-Datei die Zeilen herausfiltern, die oben genannte Angaben enthalten?
Gruß
LumenAlbum
Sorry, hatte den Text in der blauen Überschrift (wo du erwähnst das es um Linux geht) übersehen.
Vielleicht findet sich hier noch jemand der sich mit der Linux bash auskennt - ich habe fast nur mit Windows zu tun.
Möglich wäre natürlich auch noch "Java" als Programmiersprache, die auch unter Linux benutzt werden kann, wenn dem nichts entgegensteht (kann ja sein, dass es auf jeden Fall ein Shell Skript sein soll)
Gruß
LumenAlbum
Vielleicht findet sich hier noch jemand der sich mit der Linux bash auskennt - ich habe fast nur mit Windows zu tun.
Möglich wäre natürlich auch noch "Java" als Programmiersprache, die auch unter Linux benutzt werden kann, wenn dem nichts entgegensteht (kann ja sein, dass es auf jeden Fall ein Shell Skript sein soll)
Gruß
LumenAlbum
Wäre Java denn eine Option? Oder soll es unbedingt die Linux Shell sein?
Mit deinem log-Posting und unter der Bedingung, dass die log-Datei immer genau nach diesem Schema aufgebaut ist und die Anzahl der Zeilen gleich ist, wäre eine Möglichkeit in Java:
Output:
Allerdings weiß ich nicht ob das für dich in Frage kommt.
Liebe Grüße
LumenAlbum
Mit deinem log-Posting und unter der Bedingung, dass die log-Datei immer genau nach diesem Schema aufgebaut ist und die Anzahl der Zeilen gleich ist, wäre eine Möglichkeit in Java:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class StringParse
{
public static void main(String args)
{
try
{
String input = "";
String parts;
BufferedReader reader = new BufferedReader(new FileReader("test.txt"));
for (int i = 0; i < 9; i++)
{
input = reader.readLine();
parts = input.split("'");
System.out.println(parts + " " + parts[2] + parts[4] + " Sek.");
}
for (int i = 0; i < 2; i++)
{
input = reader.readLine();
parts = input.split("'");
System.out.println(parts.substring(0, 21) + " " + parts[1] + " Sek.");
}
} catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
Output:
10759 OTHERS 0:572.921.999 Sek.
10273 SELECT 8:787.561.000 Sek.
2 EXECUTE 3:993.116.999 Sek.
0 UPDATE 0:000.000.000 Sek.
0 DELETE 0:000.000.000 Sek.
0 INSERT 0:000.000.000 Sek.
153248 READ 7:818.841.000 Sek.
10907 CLOSESTMT 0:400.665.999 Sek.
233 TRANSACT 0:013.992.999 Sek.
Größter Zeitverbrauch 60:278.984.000 Sek.
Datenbank geschlossen 476:498.166.000 Sek.
10273 SELECT 8:787.561.000 Sek.
2 EXECUTE 3:993.116.999 Sek.
0 UPDATE 0:000.000.000 Sek.
0 DELETE 0:000.000.000 Sek.
0 INSERT 0:000.000.000 Sek.
153248 READ 7:818.841.000 Sek.
10907 CLOSESTMT 0:400.665.999 Sek.
233 TRANSACT 0:013.992.999 Sek.
Größter Zeitverbrauch 60:278.984.000 Sek.
Datenbank geschlossen 476:498.166.000 Sek.
Allerdings weiß ich nicht ob das für dich in Frage kommt.
Liebe Grüße
LumenAlbum