blacknight
Goto Top

Textdateien mit Powershell Filtern

Hallo, erstmal Danke für die viel oft sehr nützlichen Beiträge aller Mitstreiter hier.

Folgendes "Problem", ich hab eine Text Datei die von einem Backup generiert wird. Die Datei hat knapp 1500 Zeilen, wovon aber nur ein Bruchteil von Interesse ist. Es werden lediglich die ersten 2 Zeilen und ca. die letzten 140 Zeilen benötigt.

Nun hab ich das schon mal mit einem Script per Powershell versucht zu lösen. Leider bekomm ich es nicht hin die letzten Zeilen zu selektieren und mit in die Ausgabedatei zu schreiben.
So sieh das Skript zum jetzigen Zeitpunkt aus:

  1. Filterscript für Backupfile
clear-Host
#Variablen deklarieren
$Quelle="D:\Projekte\Testlauf\050.txt"
$Ziel="D:\Projekte\Testlauf\050_Neu1.txt"
#Daten einlesen
$Inhalt = Get-Content -Path $Quelle -TotalCount 2
$Inhalt | Set-Content -Path $Ziel
#Bis hier ist alles OK die 2 Zeilen landen in der Zieldatei.
#Nun sollte nach Möglichkeit die Datei bis zum gesuchten “Keyword” durchsucht # und ab da, alles bis zum Ende der Datei auch mit in die Zieldatei #geschrieben werden.
$Inhalt = get-content -Path $Quelle | Select-String -Pattern "Keyword"
$Inhalt | Set-Content -Path $Ziel
Ich hoffe das ist halbwegs nachvollziehbar beschrieben und das mir jemand den entscheidenden Geistigen Anstoß geben kann.

Danke schon mal. Gruß

Content-ID: 188315

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

Ausgedruckt am: 24.11.2024 um 04:11 Uhr

Connor1980
Connor1980 19.07.2012 um 17:15:25 Uhr
Goto Top
Hallo,

kannst du bitte deinen code Zwecks besserer Lesbarkeit formatieren?
Um es besser zu verstehen wäre noch hilfreich, wie der Inhalt aussieht, ein paar Zeilen genügen ja - also einmal wie sieht die Quelle aus und wie soll das Ziel aussehen?

Zum Thema: evtl. hilft die get-help about_split weiter, mit dem split Operator kannst du Strings auftrennen.

Grüße
BlackNight
BlackNight 20.07.2012, aktualisiert am 30.07.2012 um 08:03:04 Uhr
Goto Top
Hallo Connor1980,

kann ich natürlich, war gestern etwas im Streß und hab ganicht daran gedacht.
Also hier nochmal Formatiert und mit Text aus der Quelldatei.

clear-Host
#Variablen deklarieren
$Quelle="D:\Projekte\Testlauf\050.txt"
$Ziel="D:\Projekte\Testlauf\050_Neu1.txt"
#Daten einlesen
$Inhalt = Get-Content -Path $Quelle -TotalCount 2
$Inhalt | Set-Content -Path $Ziel


Bis hier ist alles OK die 2 Zeilen landen in der Zieldatei.
Nun sollte nach Möglichkeit die Datei bis zum gesuchten “Keyword” durchsucht und ab da, alles bis zum Ende der Datei auch mit in die Zieldatei geschrieben werden.

$Inhalt = get-content -Path $Quelle | Select-String -Pattern "Keyword"
$Inhalt | Set-Content -Path $Ziel


Hier ein ausschnitt aus der Quelldatei.

Das sind die ersten 4 Zeilen von denen die ersten 2 beötigt werden, was aber wie gesagt ja funktioniert.

;[BACKUP_V2.0]
; Ident: BPS=S1:$150'PS, IDC=116, VRS=0x12
;[TASK_1..199]
; Stamp: dat=05-Jul-12/Do, tim=12:52, stp=1, rsn=SaFi


ab hier ein Ausschnitt kurz vor dem Keyword ab dem der Text mitgenommen werden soll.


DSP40.TXU = 0
DSP40.DEST = $003.MV !$000.MV
DSP40.DVAL(1) = 0 !.
DSP40.DVAL(2) = @plt40.psta!.
;[END_DISPATCHCAT]

ab hier soll dann der Text bis zum ende der Datei mitgenommen werden. Das ";[TIME_SWITCH_CATALOGUES]" ist in der Datei immer einmalig, also kann dieses "Keyword" zum finden des Anfangs verwendet werden.


;[TIME_SWITCH_CATALOGUES]
;[TIMESWITCH_CAT]
; Stamp: dat=05-Jul-12/Do, tim=12:59, stp=25, rsn=SaFi
;TSC
;TSC.VISUM= BPS
;TSC.WHEN= 05.07.12 12:59:41
TSC.SIG = 50
;TSC.ACT = 1
-- TSC.ACTSDC = 0
.SDC
SDC.SIG = 4
20 01-MAY !SU
;[TSC_DST20]
EDIT DST20 ; -- Optimierte Zone HK West
;DST20.VISUM= BPS
;DST20.WHEN= 05.07.12 12:59:43
DST20.SIG = 12
DST20.ACT = 1
DST20.TA = @tcr2.ta
DST20.TYP = 5
DST20.TXI = #p3440
DST20.TXI2 = #p3138
DST20.TODAY = +00:00
DST20.TDACT = 0
-- DST20.ACTCAT = WDC
-- DST20.ACTIDX = 6
DST20.MODE = 1
DST20.PAR = SOPST !SOMOD !. !. !.
DST20.DFV = 1 !. !. !. !.
.DST20.WDC
1 MO !01:40..01:50 !0 !. !. !. !.
2 MO !02:50..03:00 !0 !. !. !. !.
3 MO !04:00..17:50 !0 !. !. !. !.
4 TU !03:30..03:40 !0 !. !. !. !.
5 TU !05:00..17:50 !0 !. !. !. !.
6 WE..TH !05:00..18:00 !0 !. !. !. !.
usw.


Hoffe das ist nun Aussagekräftiger.

Danke Gruß

Keiner eine Idee?