makroll10
Goto Top

Powershell: Automatische Datensatzverteilung in einzelne Dateien - Verzeichnisse

Hallo,

ich (PS-Anfänger) suche gerade einen gangbaren Weg, um einzelne Datensätze zunächst aus einer Gesamtdatei (eingabe.txt) auszulesen.
Diese Datensätze sollten dann anhand einer Zuordnungstabelle (verz_zuord.txt) zusammengefasst und jeweils als Datei in bestimmte Verzeichnisse aus der Zuordnungstabelle (z.B. 01, 02, 03, 04) abgelegt werden.

Beispiel:

Gesamtdatei: C:\temp\eingabe.txt
Inhalt:
12345  TEST-M
12345  TEST-Mo
32450  TEST-U
12548  TEST-Uh
22360  TEST-Mo
32990  TEST-XX

Zuordnungsdatei: C:\temp\verz_zuord.txt (die 2-Zeichen nach dem Semikolon geben das Zielverzeichnis an)
Inhalt:
12345  ;01
42347  ;01
12548  ;02
32450  ;02
12351  ;03
22360  ;04
32990  ;04

Die erzeugten Ausgabedateien aus dem o.a. Beispiel sollen den folgenden Inhalt ausweisen:

C:\temp\01\ausgabe.txt
Inhalt:
12345  TEST-M
12345  TEST-Mo

C:\temp\02\ausgabe.txt
Inhalt:
32450  TEST-U
12548  TEST-Uh

C:\temp\04\ausgabe.txt
Inhalt:
22360  TEST-Mo
32990  TEST-XX

Vielleicht hat ja jemand einen Lösungsansatz für mich.... Wäre schön...face-wink

Schon mal, vielen Dank...
Markus

Content-ID: 4709258675

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

Ausgedruckt am: 22.11.2024 um 18:11 Uhr

4400667902
4400667902 21.11.2022 aktualisiert um 13:30:39 Uhr
Goto Top
$inputfile = "C:\temp\eingabe.txt"  
$mappingfile = "c:\temp\verz_zuord.txt"  
$outputdir = "C:\temp"  
$mapping = Import-CSV $mappingfile -Delimiter ";" -Header 'Number','Folder'  

foreach($line in Get-Content $inputfile){
    $folder = ($mapping | ?{$_.Number -eq $line.split(" ")}).Folder  
    if ($folder){
        md "$outputdir\$folder" -Force | out-null  
        $line | out-file "$outputdir\$folder\ausgabe.txt" -Append  
    }
}
Uk.
makroll10
makroll10 21.11.2022 um 15:05:17 Uhr
Goto Top
Hallo Uk,

das funktioniert super... Herzlichen Dank.

Sorry, eines hätte ich mit aufnehmen/ angeben müssen:

Es kann auch sein, dass dieselbe Nummer in mehrere Verzeichnisse verteilt/ gematched werden muss.

Also beispielsweise so:
12345 ;01
42347 ;01
12548 ;02
32450 ;02
12351 ;03
22360 ;04
32990 ;04
12345 ;03
12345 ;04
Bei dem aktuellen Script-Aufbau wird in diesem Fall das folgende Verzeichnis: C:\temp\01 03 04\..... erzeugt...

VG
Markus
4400667902
Lösung 4400667902 21.11.2022 aktualisiert um 15:58:00 Uhr
Goto Top
Es kann auch sein, dass dieselbe Nummer in mehrere Verzeichnisse verteilt/ gematched werden muss.
Kein Thema baust du halt einfach noch ne Schleife dran
$inputfile = "C:\temp\eingabe.txt"  
$mappingfile = "c:\temp\verz_zuord.txt"  
$outputdir = "C:\temp"  
$mapping = Import-CSV $mappingfile -Delimiter ";" -Header 'Number','Folder'  

foreach($line in Get-Content $inputfile){
    $mapping | ?{$_.Number -eq $line.split(" ")} | %{  
        md "$outputdir\$($_.Folder)" -Force | out-null  
        $line | out-file "$outputdir\$($_.Folder)\ausgabe.txt" -Append  
    }
}
makroll10
makroll10 21.11.2022 um 17:27:59 Uhr
Goto Top
Hallo Uk,
jetzt ist es perfekt....
Nochmal herzlichen Dank und einen schönen Abend...
VG
Markus