hospiman
Goto Top

TXT File mit Batch Sript filtern

Hallo,

ich bin völliger Newbie was Batch Skripte angeht. Ich muss folgendes tun:

-Ich habe eine .txt Datei die mit TABS getrennt (Datei kommt ursprünglich aus einer MSSQL)
-Ich muss in einer Spalte (C) nach einem gewissen Wert suchen
-Die Zeilen mit diesem Wert sollen in eine neue .txt Datei mit der selben Struktur gespeichert werden.

Viele Grüße

Content-ID: 223206

Url: https://administrator.de/forum/txt-file-mit-batch-sript-filtern-223206.html

Ausgedruckt am: 06.04.2025 um 22:04 Uhr

dave84620
dave84620 28.11.2013 um 16:40:57 Uhr
Goto Top
Hallo hospiman,

schau Dir mal den die Hilfe des Befehls "for" an.
Schöne Grüße

Dave
colinardo
colinardo 28.11.2013, aktualisiert am 29.11.2013 um 10:03:49 Uhr
Goto Top
Hallo hospiman,
z.B. so
@echo off
set "file=test.txt"  
set "ausgabe=test2.txt"  
set suchstring="IchSuchDich"  

for /f "usebackq tokens=1,2,3,* delims=	" %%a in ("%file%") DO @(  
	echo %%c | findstr /i "%suchstring%" && echo %%a	%%b	%%c	%%d>>"%ausgabe%"  
)
Im jetzigen Zustand vergleicht das Script keine Groß- und Kleinschreibung des Suchstrings. Wenn du das willst musst die das /i hinter dem findstr entfernen.

Wenn's dann noch was in Powershell sein darf:
$fileIN = "c:\datenIN.txt"  
$fileOUT = "c:\datenOUT.txt"  
$suchwort = "Dein Suchwort"  
$content = gc $fileIN | ?{$_.Split("`t")[2] -match $suchwort} | Out-File $fileOUT  

Grüße Uwe
dave84620
dave84620 28.11.2013 um 17:01:48 Uhr
Goto Top
das tut aber nicht das was der TO möchte ;o)
colinardo
colinardo 28.11.2013 aktualisiert um 17:05:55 Uhr
Goto Top
Zitat von @dave84620:
das tut aber nicht das was der TO möchte ;o)
doch das tut es, was meinst du denn was er will ?? dann poste doch bitte deine Lösung ...
dave84620
dave84620 28.11.2013 um 17:07:58 Uhr
Goto Top
@colinardo

sorry, hatte den ersten Post falsch verstanden. Du hast recht :o)

Schöne Grüße
Dave
Endoro
Endoro 28.11.2013 um 23:20:03 Uhr
Goto Top
Hey, für solche Sachen wurde awk for Windows erfunden:
- Spalte 3 ("C") entspricht genau "gewissen Wert":
awk "$3==\"gewissen Wert\"" TabText.txt>Out.txt  
- Spalte 3 enthält "gewissen Wert":
awk "$3~/gewissen Wert/" TabText.txt>Out.txt  
lg.
hospiman
hospiman 29.11.2013 um 09:32:50 Uhr
Goto Top
Vielen Dank für Eure Lösungen ich habe die Lösung von @colinardo eingebaut und die läuft super perfekt. Ein kleinen Fehler habe ich noch wenn in der test.txt ein Feld in der Tabelle nicht gefüllt ist verschiebt es in der test2.txt die Spalten auf der Zeile.

Bsp.:

test.txt
a | b | c | d | e | f
1 | 2 | 3 | 4 | 5 | 6
1 | 2 | 3 | | 5 | 6
1 | 2 | 3 | 4 | 5 | 6

test2.txt
a | b | c | d | e | f
1 | 2 | 3 | 4 | 5 | 6
1 | 2 | 3 | 5 | 6 |
1 | 2 | 3 | 4 | 5 | 6
colinardo
colinardo 29.11.2013 aktualisiert um 10:03:06 Uhr
Goto Top
Hallo hospiman,
wenn zwei Tabs direkt hintereinander stehen(ohne jegliches Zeichen dazwischen) musst du einem Trick anwenden, der zwischen zwei oder drei aufeinanderfolgenden Tabs jeweils ein Leerzeichen einfügt damit die FOR-Schleife diese nicht zusammenfasst:
@echo off
set "file=test.txt"  
set "ausgabe=test2.txt"  
set suchstring="IchSuchDich"  
for /F "usebackq delims=" %%z in ("%file%") do (  
	setlocal EnableDelayedExpansion
	set line=%%z
	set line=!line:		=	 	!
	set line=!line:		=	 	!
	for /f "tokens=1,2,3,* delims=	" %%a in (^"!line!^") DO @(  
		echo %%c | findstr /i "%suchstring%" &&	echo %%a	%%b	%%c	%%d>>"%ausgabe%"  
  )
)
sollten mehr als 2 leere Spalten auftreten musst du Zeile 9 entsprechend oft wiederholen.

Grüße Uwe