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

Filtern beim Kopieren von zwei txt-Dateien

Frage Entwicklung Batch & Shell

Mitglied: ManneKL

ManneKL (Level 1) - Jetzt verbinden

06.04.2006, aktualisiert 24.05.2006, 6728 Aufrufe, 16 Kommentare

Ausfiltern von Parametern aus zwei txt-Dateien beim Kopieren

Hallo Biber,

ich habe zwei txt-Dateien und will beide Dateien (Obs04711.zut und Obs04711.zu) zusammenkopieren bzw. den Inhalt der zweiten in die erste Datei (Obs04722.zut)wobei bei der zweiten Datei im Inhalt drei gleiche Inhalte (Zeilen) nicht mit übernommen werden sollen.Von diesen Dateien habe ich jeweils über 100 Stück.


1204711
1803
19060406
20046733
211
24K
1204711
1803
19060406
20041220
211
24K

Wie heißt der Syntax unter Win2000/Win98 für das Zusammenkopieren wobei die Zeilen die mit 12XXXXX;18XX;19XXXXXX beginnen , nicht in die erste Datei übernommen werden sollen.Komme als Anfänger mit meinen Kenntnisstand nicht weiter.

Bitte um Hilfe.
Manne
Mitglied: Biber
06.04.2006 um 20:02 Uhr
Moin Manne,

würde ich so lösen:

In diesem Verzeichnis, in dem die *.zu und *.zut-Dateien sind am CMD-Prompt tippen:
01.
$cmd$findstr /b /v "12 18 19" Obs04711.zu 
02.
20041220 
03.
211 
04.
24K
(dieser FindStr-Befehl liefert alle Zeilen, die NICHT mit "12", "18" oder "19" beginnen.)

Wenn das als Kriterium reichen sollte, dann würdest Du ja an eine *zut-Datei diesen verbleibenden Rest aus der *zu-Datei so anhängen:
01.
$cmd$findstr /b /v "12 18 19" Obs04711.zu>>Obs04711.zut
Oder, für alle 100 *.zu-Dateien gilt dann halt:
...findstr /b /v "12 18 19" [dateiname].zu>>[dateiname].zut
01.
$cmd$ for /f %i in ('dir /b *.zu') do findstr /b /v "12 18 19" %i >>%~ni.zut
Wenn ich Dich richtig verstanden habe...
Gruß
Biber
P.S. Würde ich erstens mit einer Kopie der Daten versuchen *gg
...und zweitens NICHT per Batch! Sonder lieber einmal per copy & paste...
Wenn die Zeile/der Batch mehrmals gestartet wird, bekommst Du die Dateien ja immer länger, wenn Du die Zweit-Dateien *.zu nicht verschiebst oder löscht.
Bitte warten ..
Mitglied: miniversum
06.04.2006 um 20:11 Uhr
Oh Frank das hätte ja glat zu dem Posting von neulich gepasst.....
Ich könnte ja imernoch nur meine lösung in Drei Schritten anbieten von neulich.

miniversum
Bitte warten ..
Mitglied: Biber
06.04.2006 um 20:20 Uhr
@miniversum

Dafür brauche ich aber immer 30 Zeilen zum Erklären meiner einen CMD-Zeile..
Bitte warten ..
Mitglied: ManneKL
07.04.2006 um 16:33 Uhr
Hallo Biber,

wenn ich auf CMD-Promt diese Befehle audführe , dann habe ich in der .ZUT-Datei eine Fehlermeldung>>"Das System kann die angegebene Datei nicht finden".Obwohl diese im selben Ordner sich befindet.
Das Auslesen im CMD_Promt mit findstr klappt, aber das Kopieren der ausgelesenen Daten ind die .ZUT habe ich noch nicht kapiert!! Bitte Biber,ich brauche nochmal Deine Hilfe damit ich als "Greenhorn" weiterkomme. Will alles in einer .bat-Datei ausführen.
Gruss
Manne
Bitte warten ..
Mitglied: ManneKL
12.04.2006 um 09:25 Uhr
Hallo Biber,
vielen dank für die wirkungsvolle Lösung.
Sie hat auf cmd-problemlos funktioniert,entgegen meiner Vorantwort.
Habe aber noch eine Bitte.
Wie ist der Syntax, wenn ich aus mehreren *.zu-Dateinen bestimmte Parameter/Zeilen (z.Bsp:20046733,211,24K)ausfiltern und in eine neue *.zut-Datei übernehmen will?Es sool also eine neue *.zut-Datei mit nur diesen Parametern erstellt werden.
Hochachtungsvoll und mit Respekt für die Hilfe im vorraus
Manne
Bitte warten ..
Mitglied: Biber
12.04.2006 um 09:41 Uhr
Moin Manne,

na, das beruhigt mich doch, das auch dieser Oneliner tat, was er soll..*gg

Antwort auf Deine Frage:
Oben habe ich ja mit dem Findstr-Parameter "/v" alles weggefiltert, was angegeben war - also alle Zeilen genommen, die die Suchkriterien nicht enthalten.

Umgekehrter weg also: OHNE Parameter "/v" bekommst Du nur alle Zeilen, die Dein Suchkriterium enthalten.

Aber diesen Dateien würde ich dann mal eine andere Endung geben oder die in ein anderes Verzeichnis schreiben lassen.

for /f %i in ('dir /b *.zu') do findstr /b "20046733 211 24K" %i >>%~ni.zut_nurZeilenMit

Der Parameter "/b" besagt nur, dass die Suchkriterien am Anfang der Zeile stehen sollen. Wenn das nicht so ist, musst Du den weglassen.
Siehe "FindStr /?" am CMD-Prompt oder in der M$-Hilfe.

Gruß
Biber
Bitte warten ..
Mitglied: ManneKL
12.04.2006 um 11:42 Uhr
Hallo Biber,
habe noch eine Fragestellung dazu, da meine Experimente mich nicht weiterbringen, trotz der Erklärungen im CMD-Promt.
Ich möchte dass nur die Zeilen mit 20046733, 211,24K in die neue Datei übernommen werden.Alle anderen Zeilen mit 20*,21*,24* soll er ignorieren.Mein Versuch bringt auch alle anderen 20*,21*,24*-Zeilen mit in die neue Datei angehängt werden.Daß will ich nicht.Weiterhin soll er noch die Zeilen-12XXXXX,18XX,18XXXXXX in die neue Datei übernommen werden sollen.
Meine Weiterführung: for /f %i in ('dir /b *.zu') do findstr /b "120. 18. 19. 20014339 211 24K" %i >>%~ni.zut_nurZeilenMit

Bitte noch ein letztes mal Deiner Hilfestellung.
Gruß
Manne
Bitte warten ..
Mitglied: Biber
12.04.2006 um 12:07 Uhr
Och, das ist unwahrscheinlich, das es das letzte Mal sein wird

Hm, ich habs eben noch mal mit einer Beispiel angetestet.. der FindStr-Befehl scheint auch ein paar der versteckten M$-Features zu haben.
01.
>type test.zu 
02.
1204711 
03.
1803 
04.
19060406 
05.
20046733 
06.
211 
07.
24K 
08.
> findstr /b "120* 18* 19* 20014339 211 24K" test.zu 
09.
1204711 
10.
1803 
11.
19060406 
12.
211 
13.
24K 
14.
(=12:00:17  F:\=) 
15.
> findstr /b "120 18 19 20014339 211 24K" test.zu 
16.
1204711 
17.
1803 
18.
19060406 
19.
211 
20.
       ------------------------>??? nanu, hier fehlt "24K"???? 
21.
 
Teste bitte erstmal den FindStr-Teil an einer Datei, bis das Ergebnis passt. Wenn es nicht klappt, dann bitte eine PN mit Deiner Mailadresse an mich, dann schau ich mir das mal mit ein, zwei "echten" *.zu-Dateien von Dir an.

So, jetzt is' Mittach...
Grüße
Biber
Bitte warten ..
Mitglied: ManneKL
13.04.2006 um 06:29 Uhr
Hallo Biber,
meine Versuche bringen die richtige Übernahme in eine neue Datei, aber dabei werden die anderen Zeilen mit 21X und 24K angehängt , was nicht sein soll.Wenn so eine Datei, die mehrere 19XXXXXX,21X,24X enthält, aber ich im Onliner nur bestimmte 19XXXXXX,21X,24X in die neue Datei haben will.Zuzüglich einmal der Zeilen mit 12XXXXX,18XX,19XXXXXX.


Hochachtungsvoll
Manne
Bitte warten ..
Mitglied: ManneKL
13.04.2006 um 11:12 Uhr
Hallo Biber,
meine Versuche bringen die Übernahme in eine neue Datei, aber dabei werden die anderen Zeilen mit 21X und 24K angehängt , was nicht sein soll.Anbei eine Datei, die mehrere 20XXXXXX,21X,24X enthält, aber ich im Onliner nur bestimmte 20XXXXXX,21X,24X in die neue Datei haben will.Zuzüglich einmal der Zeilen mit 12XXXXX,18XX,19XXXXXX.
Der Inhalt der ZU-Datei:
1204502
1804
19040406

20014339
211
24K
20014342
211
24K
20014334
211
24K
20017618
211
24K
20016182
211
24K
20010557
211
24K


Hochachtungsvoll
Manne
Bitte warten ..
Mitglied: Biber
13.04.2006 um 12:13 Uhr
Ah, ich glaube, ich verstehe jetzt das Ziel.. sorry hab ein bisschen länger gebraucht.

Un sicherzugehen: Gemeint ist
Datei Vorher: *.zu
Der Inhalt der ZU-Datei:
1204502
1804
19040406

20014339
211
24K
20014342
211
24K
20014334
211
24K
20017618
211
24K
20016182
211
24K
20010557
211
24K

Datei NACHHER: *.zut
Der Inhalt der ZU-Datei:
1204502
1804
19040406

20014339
211 (einmal)
24K (einmal)
20014342
20014334
20017618
20016182
20010557

... und die 209143xx sind alle unterschiedlich? Oder können da auch Duplikate kommen?

Oder gibt es da noch andere Kriterien, nach denen rausgefiltert wird?
.. eine Datei, die mehrere 20XXXXXX,21X,24X enthält,
aber ich im Onliner nur bestimmte 20XXXXXX,21X,24X ...haben will..

Mit "bestimmte" ist gemeint "alle, aber nur einmalig aufgeführt"?

Rückfragend
Biber
Bitte warten ..
Mitglied: ManneKL
13.04.2006 um 13:48 Uhr
Hallo Biber,

gemeint ist in der neuen Datei:
1204502
1804
19040406

20014339 (einmal)
211 (einmal)
24K (einmal)
20014342 (nicht übernommen werden)
20014334 (nicht übernommen werden)
20017618 (nicht übernommen werden)
20016182 (nicht übernommen werden)
20010557 (nicht übernommen werden)

oder noch ein zweiter Block zusätzlich:

20XXXXXX
21X
24X

....mal sehen.
Danke ertmal Biber.
Vielleich hast Du noch n'e Lösung.
Manne
Bitte warten ..
Mitglied: Biber
13.04.2006 um 14:05 Uhr
Okay... dann ist natürlich eine andere Verarbeitung nötig als das Übernehmen "aller Zeilen mit xxx" oder "aller Zeilen ohne yyy"..
Dann ist es sinnvoller, die *.zu zeilenweise abzuarbeiten mit einem FOR /F-Konstrukt.

Zwei Fragen noch dazu:

1) ist es "immer" eine blockweise Sequenz - 200xxxxxx gefolgt von 2 weiteren Zeilen, bevor der nächste Block beginnt?

2) wenn mehrere "Blöcke" in die *.zut-Datei zu übernehmen sind, ist das von außen, am Dateinamen der *.zu-Datei erkennbar?
Oder musst Du das bei jeder Datei einzeln entscheiden?
Oder gilt immer für alle 100 Dateien "Ubernimm die "12* 18* 19*"-er am Anfang und danach den Block "200143333 21* 24" sowie den Block "2001466666 21* 24*" ?

Gruß Biber
Bitte warten ..
Mitglied: ManneKL
13.04.2006 um 14:15 Uhr
...also zu
1. es sind in jeder eintelnen Datei diese blockweisen Sequenzen (200XXXXXX,21X,24K),dann beginnt darunter der nächste Block (200XXXXXX,21X,24K).

2. es ist von außen nicht zu erkennen, sonder per Editor in einer Datei, da alle 100 Dateien diese 3-er Blöcke beinhalten.

3. Als Zusatz wär auch eine Varinate gut, wenn mann einzelne 3-er Blöcke (200XXXXXX,21X,24K)vorher definieren könnte und 1204502 1804 19040406.

Gruß
Manne
.
Bitte warten ..
Mitglied: Biber
14.04.2006 um 15:49 Uhr
Moin ManneKL,

ich habe mal eine Skizze für eine zeilenweise Datei-Verarbeitung zusammengeschreddert.

Ist leider kein Oneliner mehr
01.
::--snipp AddZuBlock.bat 
02.
:: Parameter 1: *.zu-Datei.  
03.
:: Parameter 2: Block, der angefügt werden soll. Erster passender wird genommen. 
04.
:: -- Beispiel 1) AddZuBlock test.zu 20014334  
05.
:: --> test.zut existiert noch nicht 
06.
:: --> erzeugt test.zut mit Header+Block 20014334  
07.
:: -- Beispiel 2) AddZuBlock test.zu 20016182 20021010 20021011 20021012 
08.
:: --> test.zut existiert 
09.
:: --> fügt Blöcke 20016182, 20021010, 20021011, 20021012 an test.zut an. 
10.
:: Eine gleichnamige Zieldatei mit der Endung *.zut wird mit den Kopfdaten (3Zeilen) angelegt, 
11.
:: falls noch nicht vorhanden. Falls schon vorhanden, wird der angegebene Block in Para2 angefügt. 
12.
@echo off 
13.
if [%1]==[]        (echo Keine Quelldatei angegeben!) && goto :eof 
14.
If not exist "%~1" (echo Quelldatei "%~1" nicht gefunden!) && goto :eof 
15.
SetLocal enableDelayedExpansion 
16.
(Set "quell=%~1") & Set "ziel=%~dpn1.zut" 
17.
Set /p Header=<%quell% 
18.
If not exist %ziel% call :WriteBlock %Header% 
19.
if [%2] == [] goto :eof 
20.
For %%z in (%2 %3 %4 %5 %6 %7 %8 %9) do call :WriteBlock %%z 
21.
goto :eof 
22.
 
23.
:WriteBlock optPara1=BlockID 
24.
Set /a line=0 
25.
Set found=No 
26.
Echo Soll schreiben.. Block %1... in %ziel% 
27.
For /F %%a in (%quell%) do If !line! LSS 3 ( 
28.
   If [%%a]==[%1] set "found=Ja" 
29.
   If [!found!]==[Ja] ( 
30.
   echo Schreibe [%%a]... 
31.
   echo %%a>>%ziel%  
32.
   Set /a line=!line!+1 
33.
   )) 
34.
goto :eof 
35.
:: -- snapp AddZuBlock.bat
Ergebnis am CMD-Prompt:
01.
 -------die QuellDatei: 
02.
$cmd$type test.zu 
03.
1204502 
04.
1804 
05.
19040406 
06.
 
07.
20014339 
08.
211 
09.
24K 
10.
20014342 
11.
211 
12.
24K 
13.
20014334 
14.
211 
15.
24K 
16.
20017618 
17.
211 
18.
24K 
19.
20016182 
20.
211 
21.
24K 
22.
20010557 
23.
211 
24.
24K 
25.
 
26.
$cmd$addzublock test.zu 20016182 20014334 
27.
Soll schreiben.. Block 1204502... in Z:\test.zut 
28.
Schreibe [1204502]... 
29.
Schreibe [1804]... 
30.
Schreibe [19040406]... 
31.
Soll schreiben.. Block 20016182... in Z:\test.zut 
32.
Schreibe [20016182]... 
33.
Schreibe [211]... 
34.
Schreibe [24K]... 
35.
Soll schreiben.. Block 20014334... in Z:\test.zut 
36.
Schreibe [20014334]... 
37.
Schreibe [211]... 
38.
Schreibe [24K]... 
39.
 
40.
(Ergebis Zieldatei) 
41.
$cmd$type test.zut 
42.
1204502 
43.
1804 
44.
19040406 
45.
20016182 
46.
211 
47.
24K 
48.
20014334 
49.
211 
50.
24K
Hoffe, Du kannst es verwerten.
Gruß Biber
Bitte warten ..
Mitglied: ManneKL
24.05.2006 um 06:28 Uhr
Hallo Biber,

vielen herzliche Dank für Deine Lösung.
Sie funktioniert und habe sie weiterverarbeitet....

Also, Danke
ManneKL
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

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

(2)

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

Ähnliche Inhalte
Batch & Shell
gelöst 2 große TXT Dateien vergleichen und Unterschiede in andere Datei schreiben (6)

Frage von sid.pdm zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell: Variablen aus .txt Dateien heraus ausgeben (5)

Frage von Tobiased zum Thema Batch & Shell ...

Microsoft Office
gelöst Txt Dateien in Excel importieren (9)

Frage von Serbitar zum Thema Microsoft Office ...

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

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...