none
Inhalte aus zwei Textdokumenten kombinieren RRS feed

  • Frage

  • Hallo,

    ich suche einen Weg mit der Powershell die Inhalte zweiter *.txt zu kombinieren. In beiden Dateien gibt es die gleiche Anzahl von Zeilen und das Ziel wäre Zeile1 aus Datei1 an den Anfang der Zeile1 der Datei2 zu schreiben usw. Leider ist nicht vorhersehbar wieviele Zeilen die beiden Dateien beim Aufrufen des Scriptes haben werden, hier könnte man ja vorher mit

    (type DateiA.txt).Count

    arbeiten?

    Vielen Dank im Voraus!


    Donnerstag, 10. April 2014 09:25

Antworten

  • Hallo,

    einen Befehl wie Linux ihn fuer diesen Fall kennt gibt es in der Powershell leider nicht.

    Linux Paste

    Hier eine einfache Loesung, ohne Pruefung auf Anzahl Zeilen usw. weil du schreibst die in beiden Dateien gleich ist ...

    x.txt enthaelt:

    x1
    x2

    y.txt enthaelt

    y1
    y2

    $x = Get-Content .\x.txt
    $y = Get-Content .\y.txt
    $i = 0
    $x | ForEach-Object {
    	($_, $y[$i]) -join " "; $i++
    } | Out-File .\output.txt

    output.txt entahelt dann

    X1 Y1
    X2 Y2

    Beste Gruesse
    brima

    • Als Antwort vorgeschlagen Peter Kriegel Mittwoch, 16. April 2014 13:06
    • Als Antwort markiert Alex Pitulice Dienstag, 22. April 2014 09:55
    Donnerstag, 10. April 2014 11:19
  • Hallo,

    zuerst zur zweiten Frage.

    $a = "pfadangaben\zu\einem\ziel\dateiname.endung file 'relevanter Inhalt'"
    $a.Substring($a.lastindexof("file"))

    gibt dann von dem String in der Variablen $a nur noch

    file 'relevanter Inhalt'

    aus.

    Ob du nun file willst oder nicht geht nicht klar hervor, ohne file + dem folgenden Leerzeichen wuerde es dann so aussehen:

    $a.Substring($a.lastindexof("file")+5)



    Natuerlich laesst sich auch die Frage 1 loesen, aber das ist dann einen neuen Thread Wert wo du das ganze dann auch bitte konkreter beschreibst, keiner hier kennt deine Daten.

    Denn an deinem ungefaehren Beispiel ist "00015" das was in beiden Zeilen gleich ist, also kann man mit der 00015 aus der Datei 1 in der Datei 2 suchen, dann muss das aber eindeutig sein.

    Beste Gruesse
    brima

    • Als Antwort vorgeschlagen Peter Kriegel Mittwoch, 16. April 2014 13:06
    • Als Antwort markiert Alex Pitulice Dienstag, 22. April 2014 09:55
    Donnerstag, 10. April 2014 12:55

Alle Antworten

  • Hallo,

    einen Befehl wie Linux ihn fuer diesen Fall kennt gibt es in der Powershell leider nicht.

    Linux Paste

    Hier eine einfache Loesung, ohne Pruefung auf Anzahl Zeilen usw. weil du schreibst die in beiden Dateien gleich ist ...

    x.txt enthaelt:

    x1
    x2

    y.txt enthaelt

    y1
    y2

    $x = Get-Content .\x.txt
    $y = Get-Content .\y.txt
    $i = 0
    $x | ForEach-Object {
    	($_, $y[$i]) -join " "; $i++
    } | Out-File .\output.txt

    output.txt entahelt dann

    X1 Y1
    X2 Y2

    Beste Gruesse
    brima

    • Als Antwort vorgeschlagen Peter Kriegel Mittwoch, 16. April 2014 13:06
    • Als Antwort markiert Alex Pitulice Dienstag, 22. April 2014 09:55
    Donnerstag, 10. April 2014 11:19
  • Hallo brima,

    vielen Dank für Deinen Tipp. Das Ganze macht genau das was ich wollte. Wie immer kommen aber mit einer Lösung wieder neue Fragen auf:

    Kann man das Ganze auch so bauen, dass die Shell in Datei1 nach Zeilen sucht, die einen bestimmten Inhalt (in diesem Fall ungefähr so: irgendein\Pfad\00015.MTS) haben, diese dann wiederum mit Zeilen in Datei2 vegleicht (hier sieht es ungefähr so aus: 'irgendein\Pfad\00015 clip15.mp4') und dann dementsprechend in Datei2 einfügt?

    Die zweite - und hoffentlich letzte Frage - zu diesem Thema wäre noch: Wie kann ich mit der Shell Strings aus Zeilen der *.txt bis zu einem bestimmten Zeichen entfernen? Hier wäre der Inhalt ungefähr so: pfadangaben\zu\einem\ziel\dateiname.endung file 'relevanter Inhalt'. Behalten will ich eigenlich alles ab dem Wort "file".

    Viele Grüße

    • Als Antwort vorgeschlagen Peter Kriegel Samstag, 12. April 2014 14:13
    • Nicht als Antwort vorgeschlagen Peter Kriegel Mittwoch, 16. April 2014 13:05
    Donnerstag, 10. April 2014 12:38
  • Hallo,

    zuerst zur zweiten Frage.

    $a = "pfadangaben\zu\einem\ziel\dateiname.endung file 'relevanter Inhalt'"
    $a.Substring($a.lastindexof("file"))

    gibt dann von dem String in der Variablen $a nur noch

    file 'relevanter Inhalt'

    aus.

    Ob du nun file willst oder nicht geht nicht klar hervor, ohne file + dem folgenden Leerzeichen wuerde es dann so aussehen:

    $a.Substring($a.lastindexof("file")+5)



    Natuerlich laesst sich auch die Frage 1 loesen, aber das ist dann einen neuen Thread Wert wo du das ganze dann auch bitte konkreter beschreibst, keiner hier kennt deine Daten.

    Denn an deinem ungefaehren Beispiel ist "00015" das was in beiden Zeilen gleich ist, also kann man mit der 00015 aus der Datei 1 in der Datei 2 suchen, dann muss das aber eindeutig sein.

    Beste Gruesse
    brima

    • Als Antwort vorgeschlagen Peter Kriegel Mittwoch, 16. April 2014 13:06
    • Als Antwort markiert Alex Pitulice Dienstag, 22. April 2014 09:55
    Donnerstag, 10. April 2014 12:55
  • Ich hab das Ganze jetzt anders gelöst. Wie immer habe ich mich viel zu umständlich angestellt. Vielen Dank für die Hilfe!

    Freitag, 11. April 2014 20:56
  • Hallo Peter,

    seit wann werden denn nun schon zusaetzliche Fragen auf einen Beitrag als Antwort vorgeschlagen? ;-)

    Beste Gruesse
    brima 

    Samstag, 12. April 2014 14:39
  • Hallo Peter,

    seit wann werden denn nun schon zusaetzliche Fragen auf einen Beitrag als Antwort vorgeschlagen? ;-)

    Beste Gruesse
    brima 


    Ich habe meinen Fehler Korrigiert.

    PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    auf der deutschsprachigen PowerShell Community

    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+


    Mittwoch, 16. April 2014 13:06
  • Hallo Peter,

    danke Dir.

    Beste Gruesse
    brima

    Mittwoch, 16. April 2014 14:18