Глядя на вопрос и комментарии, вы, похоже, имеете дело с CSV-файлом без заголовка.Поскольку файл содержит миллионы записей , я думаю, что использование Get-Content
или Import-Csv
может слишком сильно замедлить работу.Тогда использование [System.IO.File]::ReadLines()
будет быстрее.
Если каждая строка действительно начинается с указанной в кавычках даты, вы можете использовать различные методы для определения, начинается ли строка с "01/01/2019
или нет.Здесь я использую оператор -notlike
:
$fileIn = "D:\your_text_file_which_is_in_fact_a_CSV_file.txt"
$fileOut = "D:\your_text_file_which_is_in_fact_a_CSV_file_FILTERED.txt"
foreach ($line in [System.IO.File]::ReadLines($fileIn)) {
if ($line -notlike '"01/01/2019*') {
# write to a NEW file
Add-Content -Path $fileOut -Value $line
}
}
Обновление Судя по вашему комментарию, вы, очевидно, используете более старую .NET Framework,[System.IO.File]::ReadLines()
стало доступно начиная с версии 4.0 .
. В этом случае приведенный ниже код должен работать для вас:
$fileIn = "D:\your_text_file_which_is_in_fact_a_CSV_file.txt"
$fileOut = "D:\your_text_file_which_is_in_fact_a_CSV_file_FILTERED.txt"
$reader = New-Object System.IO.StreamReader($fileIn)
$writer = New-Object System.IO.StreamWriter($fileOut)
while (($line = $reader.ReadLine()) -ne $null) {
if ($line -notlike '"01/01/2019*') {
# write to a NEW file
$writer.WriteLine($line)
}
}
$reader.Dispose()
$writer.Dispose()