Bestimmte Zeile einer Datei auslesen
Hallo alle zusammen,
ich suche nach einem Text (Im Beispiel Python) und möchte anschließend die zweite Spalte der gefundenen Zeile in eine Datei speichern(Im Beispiel ausgabe.txt). Mit Get-Content $_.Filename)[17] kann ich die Zeile 17 auslesen. Verwende ich eine Variable mit der Zeilennummer Get-Content $_.Filename)[$Zeile], funktioniert es nicht.
Was muss ich hier anpassen?
Ausschnitt aus dem Script:
...
$Pfad = "c:\temp"
$Datei = "*.txt"
$Ausgabedatei = "ausgabe.txt"
Clear-Host
if (Test-Path $Pfad\$Ausgabedatei -PathType leaf)
{
Remove-Item $Pfad\$Ausgabedatei
}
$Full = Get-ChildItem $Pfad -Include *.txt -Recurse
$StringText = "Python"
Set-Location -Path $Pfad
Select-String -path $Pfad\$Datei -pattern $Text | Foreach-Object {
$Zeile = $_.LineNumber #Liefert 17
(Get-Content $_.Filename)[$Zeile] | Foreach-Object {$Array = $_.split(':'); $Array[1] >> $Pfad\$Ausgabedatei} #Geht nicht
(Get-Content $_.Filename)[17] | Foreach-Object {$Array = $_.split(':'); $Array[1] >> $Pfad\$Ausgabedatei} #Geht
Ich danke euch für Eure Hilfe!
Gruß
Ralf
ich suche nach einem Text (Im Beispiel Python) und möchte anschließend die zweite Spalte der gefundenen Zeile in eine Datei speichern(Im Beispiel ausgabe.txt). Mit Get-Content $_.Filename)[17] kann ich die Zeile 17 auslesen. Verwende ich eine Variable mit der Zeilennummer Get-Content $_.Filename)[$Zeile], funktioniert es nicht.
Was muss ich hier anpassen?
Ausschnitt aus dem Script:
...
$Pfad = "c:\temp"
$Datei = "*.txt"
$Ausgabedatei = "ausgabe.txt"
Clear-Host
if (Test-Path $Pfad\$Ausgabedatei -PathType leaf)
{
Remove-Item $Pfad\$Ausgabedatei
}
$Full = Get-ChildItem $Pfad -Include *.txt -Recurse
$StringText = "Python"
Set-Location -Path $Pfad
Select-String -path $Pfad\$Datei -pattern $Text | Foreach-Object {
$Zeile = $_.LineNumber #Liefert 17
(Get-Content $_.Filename)[$Zeile] | Foreach-Object {$Array = $_.split(':'); $Array[1] >> $Pfad\$Ausgabedatei} #Geht nicht
(Get-Content $_.Filename)[17] | Foreach-Object {$Array = $_.split(':'); $Array[1] >> $Pfad\$Ausgabedatei} #Geht
Ich danke euch für Eure Hilfe!
Gruß
Ralf
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 667385
Url: https://administrator.de/contentid/667385
Ausgedruckt am: 23.11.2024 um 00:11 Uhr
2 Kommentare
Neuester Kommentar
Moin Ralf,
mit der LineNumber-Eigenschaft erhälst du die Zeilennummer (welche mit 1 beginnt).
Mit:
rufst du anchließend den Zeilenindex auf (welcher mit 0 beginnt). Du musst also immer LineNumber -1 rechnen.
Es ist allerdings überhaupt nicht nötig, die Datei nochmals mit Get-Content einzulesen - Select-String liefert dir die Trefferzeile doch bereits.
Gruß Thomas
PS: Bitte zukünfitg immer Code-Tags verwenden.
mit der LineNumber-Eigenschaft erhälst du die Zeilennummer (welche mit 1 beginnt).
Mit:
(...)[$Zeile]
(...)[$Zeile-1]
Es ist allerdings überhaupt nicht nötig, die Datei nochmals mit Get-Content einzulesen - Select-String liefert dir die Trefferzeile doch bereits.
sls -path $Pfad\$Datei -pattern $Text | % {
$_.Line.Split(':')[1] | Out-File -Append $Pfad\$Ausgabedatei
}
- sls ist ein Alias für Select-String
- % ist ein Alias für Foreach-Object
Gruß Thomas
PS: Bitte zukünfitg immer Code-Tags verwenden.