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-Key: 223206

Url: https://administrator.de/contentid/223206

Printed on: April 19, 2024 at 18:04 o'clock

Member: dave84620
dave84620 Nov 28, 2013 at 15:40:57 (UTC)
Goto Top
Hallo hospiman,

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

Dave
Member: colinardo
colinardo Nov 28, 2013, updated at Nov 29, 2013 at 09:03:49 (UTC)
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
Member: dave84620
dave84620 Nov 28, 2013 at 16:01:48 (UTC)
Goto Top
das tut aber nicht das was der TO möchte ;o)
Member: colinardo
colinardo Nov 28, 2013 updated at 16:05:55 (UTC)
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 ...
Member: dave84620
dave84620 Nov 28, 2013 at 16:07:58 (UTC)
Goto Top
@colinardo

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

Schöne Grüße
Dave
Member: Endoro
Endoro Nov 28, 2013 at 22:20:03 (UTC)
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.
Member: hospiman
hospiman Nov 29, 2013 at 08:32:50 (UTC)
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
Member: colinardo
colinardo Nov 29, 2013 updated at 09:03:06 (UTC)
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