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

Frage Entwicklung Batch & Shell

Mitglied: 77575

77575 (Level 1)

27.08.2010 um 15:29 Uhr, 7596 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
Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 47 MinutenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Sicherheit

Teamviewer Sessions können gekapert werden - Update tw. verfügbar

Information von sabines vor 4 TagenSicherheit6 Kommentare

In bestimmten Konstellationen können Teamviewer Sessions gekapert werden, wahrscheinlich aber ein recht unwahrscheinliches Szenario. Da der Teamviewer gerne für ...

Heiß diskutierte Inhalte
Vmware
Installation Windows 10 VMware
Frage von Ghost108Vmware17 Kommentare

Hallo zusammen, versuche gerade mit Hilfe des vshpere clients eine virtuelle Windows 10 maschine aufzusetzen. 1. virtuelle Maschine erstellt ...

Exchange Server
SBS 2011 E-Mails können gesendet werden, aber nicht von extern empfangen
Frage von andreas1234Exchange Server14 Kommentare

Hallo Community, ich habe das Problem, dass seit knapp zwei Wochen die E-Mails von meinem SBS 2011 einwandfrei gesendet ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Windows Server
Server 2012 über Eingabeaufforderung devmgmt.msc geht nicht
gelöst Frage von achim222Windows Server9 Kommentare

Hallo, ich habe hier einen Server 2012 der im Reparaturmodus startet. Es liegt an einem falschen VirtIO Treiber für ...