Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Textdokument mit Forschleife Auswerten und ausgeben

Frage Entwicklung Batch & Shell

Mitglied: Dpole86

Dpole86 (Level 1) - Jetzt verbinden

25.11.2013 um 11:26 Uhr, 1232 Aufrufe, 11 Kommentare

Guten Morgen zusammen.

Mal wieder habe ich eine Aufgabe wo ich ein Textdokument parsen muss.

Das Textdokument sieht folgendermassen aus:
2013/10/25 16:00:07 [2888] connect from NBAPS185
2013/10/25 16:00:08 [2888] rsync on AdminClients/ from nbaps185
2013/10/25 16:00:08 [2672] connect from NBAPS141
2013/10/25 16:00:08 [2888] building file list
2013/10/25 16:00:08 [2672] rsync on AdminClients/ from nbaps141
2013/10/25 16:00:08 [2672] building file list
2013/10/25 16:00:08 [2888] sent 9853 bytes received 2540 bytes total size 21576781
2013/10/25 16:00:09 [2672] sent 10919 bytes received 2720 bytes total size 21576781
2013/10/25 16:00:11 [3476] connect from
2013/10/25 16:00:11 [3476] rsync on adminservicevmnew/ from
2013/10/25 16:00:11 [3476] building file list
2013/10/25 16:00:13 [3852] connect from NBAPS49
2013/10/25 16:00:13 [3852] rsync on AdminClients/ from nbaps49
2013/10/25 16:00:13 [3476] sent 7143 bytes received 74 bytes total size 414994843
2013/10/25 16:00:13 [3852] building file list
2013/10/25 16:00:15 [3852] sent 10922 bytes received 2723 bytes total size 21576781
2013/10/25 16:04:13 [3768] connect from NBAPS85
2013/10/25 16:04:13 [3768] rsync on AdminClients/ from nbaps85
2013/10/25 16:04:14 [3768] building file list
2013/10/25 16:04:14 [3768] sent 9853 bytes received 2540 bytes total size 21576781
2013/10/25 16:07:31 [3120] connect from UNKNOWN
2013/10/25 16:07:31 [3120] rsync on AdminClients/ from unknown
2013/10/25 16:07:31 [3120] building file list
2013/10/25 16:07:32 [3120] sent 9853 bytes received 2540 bytes total size 21576781

2013/10/25 16:08:00 [3948] connect from UNKNOWN
2013/10/25 16:08:02 [3948] rsync on AdminClients/ from unknown
2013/10/25 16:08:02 [3948] building file list
2013/10/25 16:08:04 [3948] sent 9853 bytes received 2540 bytes total size 21576781
2013/10/25 16:08:38 [3772] connect from
2013/10/25 16:08:38 [3772] rsync on adminservicevmnew/ from
Ich soll nun aus diesem Dokument Die Zeile wo sich NBAPS befindet ausgeben undzwar mit folgendem Format:

Rechner NBAPS gemeldet am %Datum%

Ich habe mich etwas reingelesen und mein Ansatz ist folgender:
FOR /F "tokens=1,3,4* delims= " %f IN (text.log) DO (findstr /I /S /C:"connect") echo %a %b %c
allerdings erhalte ich den fehler: Echo was unexpected this time


Was mach ich falsch?

Vielen Dank schon mal für eine Hilfe
Mitglied: Snowman25
25.11.2013 um 11:34 Uhr
Hallo Dpole86,

das scheint mir nicht ganz richtig, da ist ein Denkfehler drin.
Erkläre uns doch bitte kurz, wie du dir die Abarbeitung in der Schleife gedacht hast.

Gruß,
Snowman25
Bitte warten ..
Mitglied: Dpole86
25.11.2013 um 11:52 Uhr
Hi Snowman


Vielen Dank für die Schnelle Antwort.

Also

mit dem Tokens=1,4* sage ich das er mir das Datum (2013/10/25) speichert. in Token 4* soll er alles andere ab "connect" speichern, was er in der Schleife "IN (text.log) DO (findstr /I /S /C:"connect")" durchsucht und mir den Token 1,4* als %%a %%b ausgibt.
Mit Delims= " sag ich der schleife das für jedes leerzeichen ein neues Token erstellt wird?

Ist ein bischen wirr geschrieben tut mir leid nur kann ich es nicht anders erklären.

Ich will am Ende das Datum und die Zeile ab "connect" in variablen haben.

Grüße und Danke

Roman
Bitte warten ..
Mitglied: Snowman25
25.11.2013, aktualisiert um 13:04 Uhr
Hi Dpole86,

mach's so:
01.
FOR /F "tokens=1,2,3,6 delims= " %a IN ('type text.log^|findstr NBAPS') DO @ECHO Rechner %d gemeldet am %a um %b. %c
Gruß, Snowman25

€dith:
Zitat von Dpole86:

Ich will am Ende das Datum und die Zeile ab "connect" in variablen haben.
Dann doch eher so:
01.
FOR /F "tokens=1-6 delims= " %a IN ('type test.log^|findstr NBAPS') DO @ECHO Rechner %f gemeldet am %a um %b. %c
Den Teil ab der ID kannst du dann mit
Echo %d %e %f
rekonstruieren.

Vergiss nicht, dass in einem Batchfile alle Schleifenvariablen doppelte %-Zeichen brauchen!
Bitte warten ..
Mitglied: Dpole86
25.11.2013 um 13:10 Uhr
Perfekt Danke :D



FOR /F "tokens=1,2,3,6 delims= " %%a IN ('type text.log^|findstr NBAPS') DO @ECHO Rechner %%d gemeldet am %%a um %%b. %%c

Kurz zumVerständnis.. was macht ^ ? und wozu ist das @ Echo ?

GrüßeRoman
Bitte warten ..
Mitglied: Snowman25
25.11.2013, aktualisiert um 13:20 Uhr
Zitat von Dpole86:

Kurz zumVerständnis.. was macht ^ ? und wozu ist das @ Echo ?
Das Caret (^) ist zur Maskierung der Pipe (|). Würde dieses nicht maskiert werden, würde der Befehlszeileninterpreter (die cmd) versuchen, das Ergebnis von FOR /F "tokens=1,2,3,6 delims= " %%a IN ('type text.log als Input für findstr NBAPS') DO ECHO Rechner %%d gemeldet am %%a um %%b. %%c zu verwenden. Das zerstört allerdings die Syntax von FOR und endet dadurch ganz einfach in einem Fehler.
Mit dem Caret wird es richtig geparst: type text.log wird als Input für den findstr NBAPS-Befehl verwendet.

Das at-Zeichen (@) dient zum verstecken der Eingabezeile auf der Ausgabekonsole. Wenn du den Befehl auf der Kommandozeile ausführst, siehst du den Unterschied:
MIT @:
C:\Users\me\Desktop>FOR /F "tokens=1-6 delims= " %a IN ('type test.log^|findstr NBAPS') DO @ECHO Rechner %f gemeldet am %a um %b. %c 
Rechner NBAPS185 gemeldet am 2013/10/25 um 16:00:07. [2888] 
Rechner NBAPS141 gemeldet am 2013/10/25 um 16:00:08. [2672] 
Rechner NBAPS49 gemeldet am 2013/10/25 um 16:00:13. [3852] 
Rechner NBAPS85 gemeldet am 2013/10/25 um 16:04:13. [3768]
OHNE @:
C:\Users\me\Desktop>FOR /F "tokens=1-6 delims= " %a IN ('type test.log^|findstr NBAPS') DO ECHO Rechner %f gemeldet am %a um %b. %c 
 
C:\Users\me\Desktop>ECHO Rechner NBAPS185 gemeldet am 2013/10/25 um 16:00:07. [2888] 
Rechner NBAPS185 gemeldet am 2013/10/25 um 16:00:07. [2888] 
 
C:\Users\me\Desktop>ECHO Rechner NBAPS141 gemeldet am 2013/10/25 um 16:00:08. [2672] 
Rechner NBAPS141 gemeldet am 2013/10/25 um 16:00:08. [2672] 
 
C:\Users\me\Desktop>ECHO Rechner NBAPS49 gemeldet am 2013/10/25 um 16:00:13. [3852] 
Rechner NBAPS49 gemeldet am 2013/10/25 um 16:00:13. [3852] 
 
C:\Users\me\Desktop>ECHO Rechner NBAPS85 gemeldet am 2013/10/25 um 16:04:13. [3768] 
Rechner NBAPS85 gemeldet am 2013/10/25 um 16:04:13. [3768]
Gruß,
Snowman25
Bitte warten ..
Mitglied: Dpole86
25.11.2013 um 13:22 Uhr
Vielen Herzlichen Dank :D

gibt es die Möglichkeit das ich den output mit ";" trenne und das in eine CSV exportiere?

also so, dass das ";" als trennzeichen für die spalten wirkt?

Grüße Roman
Bitte warten ..
Mitglied: Snowman25
25.11.2013, aktualisiert um 13:32 Uhr
Zitat von Dpole86:

Vielen Herzlichen Dank :D

gibt es die Möglichkeit das ich den output mit ";" trenne und das in eine CSV exportiere?
01.
SET logfile=text.log 
02.
SET outputfile=output.csv 
03.
SET searchstring=NBAPS 
04.
 
05.
FOR /F "tokens=1-6 delims= " %a IN ('type %logfile%^|findstr %searchstring%') DO ( 
06.
	@ECHO Rechner %f gemeldet am %a um %b. %c 
07.
	@Echo %a;%b;%c;%d;%f>>%outputfile% 
08.
)
Gibt folgenden Output in output.csv:
2013/10/25;16:00:07;[2888];connect;NBAPS185 
2013/10/25;16:00:08;[2672];connect;NBAPS141 
2013/10/25;16:00:13;[3852];connect;NBAPS49 
2013/10/25;16:04:13;[3768];connect;NBAPS85
Wenn das alles ist, beachte bitte Wie kann ich einen Beitrag auf "gelöst" oder "erledigt" setzen?.
Bitte warten ..
Mitglied: Dpole86
25.11.2013 um 13:48 Uhr
Dankeschön

habs aber auch selber hinbekommen da wir englisches Office haben

FOR /F "tokens=1,2,3,6 delims= " %%a IN ('type C:\win\bat\rsyncd.log^|findstr NBAPS') DO @ECHO "Rechner %%d","gemeldet am %%a","%%b">> C:\win\bat\test.csv


Grüße Roman
Bitte warten ..
Mitglied: Dpole86
26.11.2013 um 14:01 Uhr
Hi Bastla

wie kann ich solche Zeilen "ignorieren" ?

2013/09/05 12:47:59 [4612] forward name lookup for NBAPS166 failed: hostname nor servname provided, or not known

Weil er gibt mir immer dieses "not" in dm CSV aus. (warum auch immer)

reicht es wenn ich in die Forschleife noch ein |findstr /v not mache?

Grüße Roman
Bitte warten ..
Mitglied: Snowman25
26.11.2013, aktualisiert um 14:08 Uhr
Ich bin nicht bastla, der Thread sollte schon längst gelöst sein aber hier ist deine Antwort:
01.
SET logfile=text.log 
02.
SET outputfile=output.csv 
03.
SET searchstring=NBAPS 
04.
SET searchexclude=not 
05.
 
06.
FOR /F "tokens=1-6 delims= " %%a IN ('type %logfile%^|findstr %searchstring%^|findstr /V %searchexclude%') DO ( 
07.
	@ECHO Rechner %%f gemeldet am %%a um %%b. %%c 
08.
	@Echo %%a;%%b;%%c;%%d;%%f>>%outputfile% 
09.
)

Und hättest du gleich geschrieben, dass du ein rsync-Log auswerten möchtest und eine aktuelle Liste aller Clients und deren letzte Connect-Daten haben möchtest, wären wir auch schon fertig
Bitte warten ..
Mitglied: Dpole86
26.11.2013 um 14:16 Uhr
Sorry Snowman
Ich lese hier nur grad dauernd von bastla paar threats und da habe ich nimmer dran gedacht

Danke für den Code und sorry für den langen Prozess. Ich mag halt einen step by step anleitung weil ich dann dadurch mehr lerne.

Trotzdem Danke dir

Und ja Threat ist gelöst ...jetzt :D
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch ausgabe zeilenweise stat spaltenweise ausgeben (4)

Frage von sugram zum Thema Batch & Shell ...

Batch & Shell
gelöst Mit Batchdatei Informationen auslesen und diese strukturiert in Excel ausgeben (9)

Frage von Flodsche zum Thema Batch & Shell ...

C und C++
String einlesen in Array und wieder ausgeben von hinten (4)

Frage von Protected zum Thema C und C ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...