Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Bestimmte Zeilen in Textdatei finden und in andere Datei schreiben

Mitglied: 77575

77575 (Level 1)

27.08.2010 um 15:29 Uhr, 7609 Aufrufe, 2 Kommentare

Ich bin zu blöd die Lösung allein zu finden.

Hab ein Logfile in dem ich bestimmte Angaben in eine andere Dateischreiben möchte.

Das Logfile sieht etwa so aus:

Datenbankname: <datenbank-01>
Datenbankstatus: ist OK
Config: Standard
Blah Blah: irgendwas
Blub Blub: sonstiges

Irgendwelcher Text
Irgendwelcher Text

Datenbankname: <datenbank-02>
Datenbankstatus: läuft grad nicht
Config: extra
Blah Blah: irgendwas
Blub Blub: sonstiges

Datenbankname: <datenbank-03>
Datenbankstatus: wird gestartet
Config: Standard
Blah Blah: irgendwas
Blub Blub: sonstiges
Irgendwelcher Text
Irgendwelcher Text
...usw.


Ich muss jetzt jeweils die beiden Zeilen Datenbankname: und Datenbankstatus: in eine andere Datei schreiben.
wobei ich aber nur die beiden zeilen von bestimmten Datenbanken brauche.

mit
findstr /I /C:"Datenbankname: <datenbank-02>" "meinlog.log" >>neuedatei.log

kann ich zwar die entsprechende DB Zeile herausfiltern aber nicht die dazugehörige Datenbankstatus: Zeile.

Es kann auch sein das ich bei bestimmten DB auch noch die 3 Zeile benötige.

Am liebsten wäre mir das ganze ohne FOR schleife, einfach findstr und dann angeben ob 2 zeilen oder 3 zeilen danach mit in die neue Datei geschrieben werden sollen.
Das ist zwar nicht elegant aber für mich als Nicht Batchspezi leichter zu lesen und später auch noch zu verstehen.

gruss 01
Mitglied: bastla
27.08.2010 um 16:27 Uhr
Hallo 01-01-01!
Am liebsten wäre mir das ganze ohne FOR schleife, einfach findstr und dann angeben ob 2 zeilen oder 3 zeilen danach mit in die neue Datei geschrieben werden sollen.
Die gute Nachricht vorweg: Es geht sogar ohne "findstr" - allerdings wirst Du dafür zB einen Praktikanten brauchen ...

Wenn es ein Batch sein soll (und Du keine speziellen Kontakte zu MS und daher auch nur die "findstr"-Version wie wir alle zur Verfügung hast), kommst Du um eine "for"-Schleife nicht herum - und dann ist's eigentlich auch schon egal, wenn es noch eine zweite gibt:
01.
@echo off & setlocal 
02.
set "DB=%~1" 
03.
set "Anz=%~2" 
04.
if not defined Anz echo Bitte Datenbank und Zeilenanzahl als Parameter angeben! & goto :eof 
05.
 
06.
set "Ein=D:\meinelog.log" 
07.
set "Aus=D:\neuedatei.log" 
08.
 
09.
set Skip= 
10.
for /f "delims=:" %%i in ('findstr /n /c:"Datenbankname: %DB%" "%Ein%"') do set "Skip=%%i" 
11.
if not defined Skip echo "%DB%" nicht gefunden! & goto :eof 
12.
 
13.
set /a Ab-=1 
14.
for /f "delims=" %%i in ('more +%Skip% "%Ein%"') do set "Zeile=%%i" & call :ProcessLine 
15.
goto :eof 
16.
 
17.
:ProcessLine 
18.
if not %Anz% gtr 0 goto :eof 
19.
set /a Anz-=1 
20.
set "Zeile=%Zeile:<=^<%" 
21.
set "Zeile=%Zeile:>=^>%" 
22.
>>"%Aus%" echo %Zeile% 
23.
goto :eof
Beim Aufruf ist der Datenbankname und die Zeilenanzahl zu übergeben, also etwa:
C:\Batches\GetDBInfo.cmd "<datenbank-02>" 3
In dieser Version des Batches sind Ein- und Ausgabedatei "hardcoded", können aber bei Bedarf natürlich auch als Parameter 3 und 4 übergeben werden ...

Zum Ablauf:
Ab Zeile 9 wird die Nummer (%Skip%) der Zeile gesucht, an der die Info zur angegebenen DB beginnt. Da diese Zeile auch mit ausgegeben werden soll, wird diese Zeilennummer um 1 reduziert, um damit die Anzahl der vorher zu überspringenden Zeilen zu ermitteln.

In der zweiten Schleife werden dann nach Überspringen der entsprechenden Zeilenanzahl alle weiteren Zeilen der Eingabedatei durchlaufen, jeweils in die Variable %Zeile% gespeichert und so zur Verarbeitung an das Unterprogramm ":ProcessLine" weitergereicht.

In diesem Unterprogramm wird zunächst geprüft, ob überhaupt noch eine Zeile auszugeben ist - wenn nein, sofortiger Rücksprung ins Hauptprogramm.
Sind noch Ausgabezeilen übrig, muss deren Anzahl um 1 reduziert werden und, da ich Deine Vorgabe des DB-Namens mit den enthaltenen Sonderzeichen "<" und ">" ernst genommen habe, die Zeile für eine Ausgabe ohne umschließende Anführungszeichen durch "Maskieren" dieser Sonderzeichen "verträglich" gemacht werden - falls es in den Ausgabezeilen keine derartigen Sonderzeichen geben kann, können die Zeilen 20 und 21 ersatzlos gestrichen werden.

Schließlich kann die Zeile der Zieldatei hinzugefügt werden. Noch als Anmerkung: Die Zieldatei wird immer nur erweitert (also nicht vorweg gelöscht), sodass der Batch mehrmals hintereinander (zB aus einem weiteren Batch) aufgerufen werden kann.

Grüße
bastla
Bitte warten ..
Mitglied: 77575
28.08.2010 um 19:30 Uhr
hallo bastla,

vielen dank, das hat im großen und ganzen wunderbar geklappt.

hab die zeile 10 noch geändert
for /f "delims=:" %%i in ('findstr /n /c:"Datenbankname: %DB%" "%Ein%"') do set "Skip= %%i" & set /a Skip-=1

und zeile 13 weggelassen.

musste auch noche ne weiter variable definieren weil der text "Datenbankname: " leider auch nicht immer gleich ist.


vielen dank nochmal

gruss 01
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Erstellungsdatum vor jede Zeile einer Textdatei schreiben

gelöst Frage von freakonaleashBatch & Shell5 Kommentare

Hallo zusammen, ich habe einen Ordner mit ganz vielen Textdateien. Ich bräuchte eine Batch, die in jede Datei vor ...

Batch & Shell

Bestimmte Zeile aus mehreren Dateien in eine neue Datei schreiben

gelöst Frage von Oggy76Batch & Shell5 Kommentare

Hallo zusammen, meine Kenntnisse in Sachen batch/shell sind ehr auf Anfängerniveau zu sehen. Grund -basics im CMD-Prompt sind vorhanden, ...

Batch & Shell

Bestimmte Zeile einer Textdatei mit Batch auslesen

gelöst Frage von PinkFLuffyUnicornBatch & Shell2 Kommentare

Hi, ich habe ein kleines Batch Script, welches mir den Status der Firewall ausgeben soll(ob an oder aus) der ...

Batch & Shell

Batch-Skript: Messdaten in Textdatei finden und in eine neue Datei schreiben

gelöst Frage von habmalnefrageBatch & Shell5 Kommentare

Guten Morgen, ich komme mit der For-Schleife einfach nicht weiter. Ich habe eine Textdatei, aus der ich mehrere feste ...

Neue Wissensbeiträge
Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 6 StundenWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Sicherheit
Microsoft und Skype: Sicherheit
Information von kgborn vor 6 StundenSicherheit

Die Tage gab es ja einige Berichte zur Sicherheit des Skype-Updaters. Der Updater von Skype läuft unter dem Konto ...

Viren und Trojaner
Neue Avira Management Console Egosecure
Information von OSelbeck vor 1 TagViren und Trojaner1 Kommentar

Hallöchen zusammen, ich weiß nicht, wer von euch noch Avira einsetzt Wir haben ein paar Kunden Avira hatte ja ...

Datenschutz

Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10

Information von Penny.Cilin vor 1 TagDatenschutz8 Kommentare

Hallo, passend zum Thema Ablösung LIMUX in München ein Beitrag bei Heise (siehe Link folgend). Behörden ignorieren Sicherheitsbedenken gegenüber ...

Heiß diskutierte Inhalte
Exchange Server
Exchange Postfach Einbindung Betriebs-rat -Arzt, Bewerbung .
Frage von YellowcakeExchange Server15 Kommentare

Hey ich habe da mal eine Denksport Aufgabe bekommen Genutzt wird ein Exchange Server 2010. hier gibt es den ...

Datenschutz
Telematikinfrastruktur Erfahrungsaustausch
Frage von MOS6581Datenschutz12 Kommentare

Moin, unter meinen Kunden befinden sich auch einige Ärzte, welche sich künftig mit der Telematikinfrastruktur-Geschichte der Gematik herumärgern dürfen. ...

Windows Server
Delgegierte OU via RDP verwalten - Objektverwaltung zuweisen
gelöst Frage von TOAOICEWindows Server12 Kommentare

Hallo, ich habe folgendes Problem. Ich möchte in meiner Domäne (Server2016), einer Gruppe (OUAdmin) Berechtigungen auf die OU Test ...

Windows Server
Downgrade von Windows Server 2016 auf 2012 - Wie vorgehen?
Frage von EstefaniaWindows Server12 Kommentare

Guten Ich habe eine Frage an Erfahrene unter euch. Durch einen InPlace Upgrade wurde Windows Server 2012 auf die ...