Ich habe mehrere durch Trennzeichen getrennte Textdateien (jede hat über 1 Million Zeilen). Außerdem habe ich eine Datei namens "delete.log".Wie lösche Zeilen von mehreren Textdateien basierend auf String-Liste aus einer anderen Datei?
Struktur der delete.log Datei ist wie folgt:
STRING1
STRING2
STRING3
.
.
STRING N
Struktur eine von vielen txt-Dateien ist wie folgt: name1.txt:
text1,text2,text3,text4,STRING1 "entire row will be deleted"
text1,text2,text3,text4,STRING1 "entire row will be deleted"
text1,text2,text3,text4,text5
text1,text2,text3,text4,STRING2 "entire row will be deleted"
text1,text2,text3,text4,STRING1 "entire row will be deleted"
text1,text2,text3,text4,text5
Ich bin für eine effektive Suche So können Sie jede Textzeichenfolge aus der Datei "delete.log" lesen, und wenn in der Zeile 5 eine Übereinstimmung mit der Textzeichenfolge aus der Datei delete.log vorhanden ist, wird die gesamte Zeile gelöscht. Wenn sich eine Textdatei in einem Ordner mit dem Dateinamen delete.log wie STRING1.txt befindet, wird die Datei gelöscht.
Dieser Code unten nur ganze Reihe von mehreren Textdateien löschen, wenn Textzeichenfolge in Spalte 5 ist STRING1
$paths = Get-ChildItem '.\' -Filter '*.txt'
ForEach ($path in $paths) {
$pathtmp = "$path.tmp"
$sr = New-Object -TypeName System.IO.StreamReader -ArgumentList $path
$sw = New-Object -TypeName System.IO.StreamWriter -ArgumentList $pathtmp
Do {
$line = $sr.ReadLine()
$Column = $line.split(",")
If ($Column[4] -ne "STRING1") {
$sw.WriteLine($line)
}
} Until ($sr.EndOfStream)
$sr.close()
$sw.close()
Remove-Item $path
Rename-Item $pathtmp $path
}
Wie ich oben erwähnt habe. Ich habe mehrere TXT-Dateien mit jeweils über 1 Million Zeilen. Ich möchte meinen Code so schnell wie möglich behalten. Deshalb verwende ich System.IO.StreamReader und System.IO.StreamWriter. Ich bin mir nicht sicher, ob Ihre Lösung sehr effektiv wäre. – Steve
Ich würde gerne so etwas in meinen Code implementieren: foreach ($ -Zeile in [System.IO.File] :: ReadLines ($ filename)) { // mach etwas mit $ line } Wenn es möglich ist. – Steve
okay. Sie können die Auswahlzeichenfolge oben in Ihrer $ line verwenden –