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 Zeilennummerierung einer Textdatei mittels Batch entfernen

Mitglied: Shadow377

Shadow377 (Level 1) - Jetzt verbinden

17.07.2006, aktualisiert 18.07.2006, 8653 Aufrufe, 4 Kommentare

Hallo an allle
Bin neu hier im Forum und hoffe ihr könnt mir hier weiterhelfen..

Ich habe folgendes Problem: Ich muss von mehreren mehrzeiligen Textdateien (z.B. a.txt, b.txt) jeweils eine Zeile zufällig auswählen und ein eine neue Exceltabelle(c.xls) schreiben. Die Quelle für die Textdateien sind Eventlogs (Spalten Typ, Datum, Uhrzeit usw); sie sind durch Tabulatoren getrennt.

Meine Strategie zur Lösung des Problems war folgende:
Ich durchsuche die Dateien für die einzelnen Eventlogs mit findstr systematisch nach jedem Datum eines bestimmten Zeitraumes (beispielsweise 01.07.2006 bis 08.07.2006), schreibe alle Übereinstimmungen in eine eigene Textdatei (wären die oben genannten a.txt, b.txt usw). Dannach nummeriere ich mit findstr /n "^" die Zeilen der einzelnen Dateien durch und leite die Ausgabe in eine andere Datei (für a.txt z.B. a2.txt) um.
Dannach wird mit
Set /A "Counter=0"
FOR /F "delims=" %%A IN (a2.txt) DO SET /A "COUNTER+=1"

durchgezählt, wie viele Zeilen in der Datei a2.txt vorhanden sind, um anschließend mit %random% eine Zahl zu bestimmen; die übereinstimmende Zeilennummer wird dann wieder mit findstr überprüft und ausgegeben.

So weit, so gut; jetzt habe ich genau 1 Zeile pro Tag, die noch immer durch Tabulatoren getrennte Einträge besitzt und somit durch ändern der Extension von txt auf xls zu einer Excel-Tabelle wird.

Allerdings gibt es dabei folgendes Problem:
Die Zeile hat folgenden Aufbau:
Zeilennummer:Spalte1|tab|Spalte2|tab|Spalte3|....

Für das endgültige Resultat muss ich allerdings die Ausgabe OHNE Zeilennummer: erhalten. Ob die Zeilennummer 1, 2 oder auch 6- stellig ist, kann ich im vorhinein nicht sagen, daher ist es auch nicht möglich stur die ersten n-Stellen zu entfernen.
Mitglied: AxelHahn
17.07.2006 um 15:58 Uhr
Hallo,

die Zeilennummer wird doch immer mit ":" getrennt. Dann kannst du in deiner FOR-Schleife mit "tokens=1,2* delims=:" arbeiten.

for /F "tokens=1,2* delims=:" %%a in (Dateiname.txt) do echo %%b

Axel
Bitte warten ..
Mitglied: Shadow377
18.07.2006 um 08:23 Uhr
Danke für diese schnelle Antwort. Leider bin ich nicht so der Batchprofi und verstehe daher auch den Syntax nicht so ganz, wäre super wenn du ihn mir erklären könntest..

Ich habe die Zeile mal kopiert und ausprobiert; dabei habe ich allerdings leider festgestellt, dass die oben genannte Uhrzeit leider darunter leidet und nach den Stunden abgeschnitten wird (inklusive dem Rest der Zeile).
Beispiel: Statt "Durch Tabulatoren getrennte Einträge"|tab|17:20:37|tab|"weitere durch Tabulatoren getrennte Einträge" erhalte ich also nur noch folgende Ausgabe:
Einträge vor Datum|tab|17
Es wird somit die gesamte Zeile nach den Stunden abgeschnitten, das Problem ist allerdings, dass nur vor dem ersten : weggeschnitten werden darf (unabhängig von der Anzahl der Zeichen davor); die restlichen : müssen unbeeinflusst bleiben.
Es ist leider auch nicht sicher vorhersagbar, wie viele : in der Zeile enthalten sind..

Information zur Quelldatei: Sie ist derzeit schon so gefiltert, dass nur noch eine einzige Zeile (Zeilennummer:Zu verarbeitender Text)+einem Zeilenumbruch enthalten sind. Dies ist wohl nicht die optimalste Lösung (lieber wäre es mir, die Dateiausgabe schon bei findstr abzufangen, dann die Zeilennummer zu entfernen und dann erst in eine Datei zu schreiben, allerdings ist mir eine schnelle Lösung des Problems und ein nicht zu komplizierter Code wichtiger...

Ich bin übrigens draufgekommen, dass die folgende Zeile das Ergebnis nur in der cmd ausgiebt, nicht allerdings in eine Datei schreibt, war das beabsichtigt? Das Ergebnis brauche ich nämlich wieder in einer Datei.
Daher habe ich die Zeile wie folgt geändert:
for /F "tokens=1,2* delims=:" %%a in (Quelle.txt) do echo>>Ziel.txt %%b
Bitte warten ..
Mitglied: AxelHahn
18.07.2006 um 08:43 Uhr
Hallo,

wenn das mit der Uhrzeit nicht klappt ... da war doch ein kleiner Fehler. Bei Tokens gib 1* statt 1,2* an.


del output.txt 2>nul
for /F "tokens=1* delims=:" %%a in (datiename.txt) do echo %%b>>output.txt


Erklärung:
a) delims ist der Trenner in der Zeile.
b) tokens gibt an, welche Felder, die durch das (die) Trennzeichen entstehen, zurückgeliefert werden. Die Felder werden in den nächstfolgenden Buchstaben als Variablen abgelegt.

Beispiel:

for /F "tokens=1,4,5 delims=," %%m in (datiename.txt) do echo %%m .. %%n .. %%o

Bei einer Kommaseparierten Liste werden die Felder 1,4 und 5 gelesen. Innerhalb der For-Schleife sind sie als Variablen n, m und o greifbar (ab m hochzählend, weil %%m als Zählvariable angegeben ist).

c) Bei Tokens kann man auch - und * verwenden. Durch den Wert "1*" kann ich genau 2 Felder abgreifen: den Wert vor meinem Trenner und den ganzen Rest ab dem Trenner (unabh. ob das Trennzeichen noch einmal auftaucht oder nicht).

Das erklärte es auch noch einmal:

FOR /?



Schönen Tach noch!
Axel
Bitte warten ..
Mitglied: Shadow377
18.07.2006 um 08:54 Uhr
Super, hat geklappt, vielen Dank
Kompliment übrigens im Bezug auf die wirklich sehr kurzen Antwortzeiten und guten Beiträge. Ich muss sagen auch wenn ich in gewissem Maß damit gerechnet habe bin ich doch positiv überrascht und beeindruckt, dass die Antworten derart schnell kommen

Danke auch für die gute Erklärung
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch Textdatei Spaltenweise auslesen
Frage von PinkFLuffyUnicornBatch & Shell7 Kommentare

hi, ist es irgendwie möglich anstatt eine Textdatei via Batch Spaltenweise auszulesen und nicht zeilenweise wie das normal ganz ...

Batch & Shell
Batch: Textdatei Zeilenweise auslesen
gelöst Frage von CreatorXBatch & Shell2 Kommentare

Hallo, ich weiß, zu dem Thema gibt es schon unzählige Threads. Ich hab auch einiges dazu gefunden und trotzdem ...

Batch & Shell

Batch - Textdatei benutzerbezogen auslesen

Frage von listigerTeppichBatch & Shell4 Kommentare

Hallo beisammen :) ich habe eine txt-Datei in der pro Zeile ein Username und dahinter ein Dateiname steht. Diese ...

Batch & Shell

Dateiname in Textdatei via Batch

gelöst Frage von plutowitschBatch & Shell4 Kommentare

Hallihallo, mein Problem ist wahrscheinlich für den Ein oder Anderen recht trivial, für mich als Anfänger jedoch schwieriger als ...

Neue Wissensbeiträge
Erkennung und -Abwehr
Emotet mit Rspamd und Oletools bekämpfen
Tipp von Dani vor 4 StundenErkennung und -Abwehr1 Kommentar

Moin, Um oletools während der Annahme einer E-Mail die bereits angehängten Office-Dateien analysieren lassen zu können, haben wir für ...

Viren und Trojaner

Gratis-Entschlüsselungstool für STOP-Ransomware verfügbar

Information von AnkhMorpork vor 10 StundenViren und Trojaner

Der Sicherheitsanbieter Emisoft hat ein kostenloses Tool veröffentlicht, mit dem sich Dateien entschlüsseln lassen, die die Ransomware STOP unbrauchbar ...

Off Topic
8 zoll disketten
Information von brammer vor 1 TagOff Topic5 Kommentare

Hallo, ob das so gut ist brammer

Off Topic
Noch mehr was ich nicht brauche
Information von brammer vor 4 TagenOff Topic6 Kommentare

Hallo, WOFÜR? WARUM? brammer

Heiß diskutierte Inhalte
Windows 7
Alter PC abgebrannt - Festplatte im neuen PC führt zum Bluescreen
gelöst Frage von CAT404Windows 725 Kommentare

Moin ich habe seit heute mittag einen PC aufm Tisch stehen, total verzweifelter Eigentümer. Der Rechner ist so ein ...

Server-Hardware
Welches Betriebssystem für DL380p Gen8 für den Heimgebrauch
Frage von peter91gServer-Hardware17 Kommentare

Hallo zusammen, betreibe Zuhause einen Dl380p G8 derzeit mit ESXI in der Testversion. Es läuft je nach Bedarf Ubuntu ...

Windows Server
Powershell Skript kann nicht geladen werden
Frage von renatus85Windows Server14 Kommentare

Hallo, ich habe folgendes Anliegen: In unserer Organisation setzen wir AlwaysOn VPN ein. Das funktioniert soweit auch ohne Probleme. ...

Router & Routing
ARCHER C7 als Open VPN-Server im Netwerk einer Fritzbox 6490
Frage von thburkhartRouter & Routing14 Kommentare

Guten Tag, ich habe bei UnityMedia eine Fritzbox 6490, die die Verbindung zur WAN-Seite herstellt. Einen VPN-Zugriff realisiere über ...