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-Key: 667385

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

Printed on: April 24, 2024 at 01:04 o'clock

Member: TK1987
Solution TK1987 Jun 07, 2021 updated at 11:59:50 (UTC)
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.
Member: runner-ralf
runner-ralf Jun 08, 2021 at 07:17:28 (UTC)
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