runner-ralf
Goto Top

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

Content-ID: 667385

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

Ausgedruckt am: 23.11.2024 um 00:11 Uhr

TK1987
Lösung TK1987 07.06.2021 aktualisiert um 13:59:50 Uhr
Goto Top
Moin Ralf,

Zitat von @runner-ralf:
$Zeile = $_.LineNumber  #Liefert 17
mit der LineNumber-Eigenschaft erhälst du die Zeilennummer (welche mit 1 beginnt).

Mit:
(...)[$Zeile]
rufst du anchließend den Zeilenindex auf (welcher mit 0 beginnt). Du musst also immer LineNumber -1 rechnen.
(...)[$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.
runner-ralf
runner-ralf 08.06.2021 um 09:17:28 Uhr
Goto Top
Hallo Thomas,

danke für deine Hilfe. Ich habe Get-Content benutzt weil ich ausgehend von der Zeile wo der begriff "Python" gefunden wird 3 Zeilen weiter und noch einmal 8 Zeilen weiter eine Spalte auslesen muss. Das war in meinem Code Schnippsel nicht zu sehen.

Ich werde in Zukunft Code-Tags verwenden.

Viele Grüße Ralf