Пустая первая строка при использовании «select-string -pattern» для удаления строк из файла - PullRequest
0 голосов
/ 21 марта 2019

У меня есть простой текстовый файл, который выглядит следующим образом ...

A,400000051115,null,null,null,null,null,null,null,20190312,090300,Answer Machine,2019,3,14,10,0
A,400000051117,null,null,null,null,null,null,null,20190312,090300,Confirmed,2019,3,14,10,30
A,400000051116,null,null,null,null,null,null,null,20190312,090300,Answer Machine,2019,3,14,11,0
A,400000051114,null,null,null,null,null,null,null,20190312,090300,Wants to Cancel,2019,3,14,9,0
A,400000051117,null,null,null,null,null,null,null,20190312,091800,SMS Sent,2019,3,14,10,30
A,400000051116,null,null,null,null,null,null,null,20190312,091800,SMS Sent,2019,3,14,11,0
A,400000051115,null,null,null,null,null,null,null,20190312,091800,SMS Sent,2019,3,14,10,0
A,400000051116,null,null,null,null,null,null,null,20190312,093000,Appointment Cancelled/Rescheduled Via SMS,2019,3,14,11,0

Мне нужно сохранить все строки, кроме тех, в которых есть «Отправленные SMS», в новый файл. Я использую следующее ...

get-content $SourceFile.FullName | select-string -pattern 'SMS Sent' -notmatch | Out-File $targetFile

Почему в результирующем файле я получаю пустую первую строку?

1 Ответ

0 голосов
/ 21 марта 2019

Если вы измените Out-File $targetFile на Out-Host или даже просто пропустите последний сегмент в конвейере, вы также увидите пустую строку в выводе консоли.

Выходной аналог Get-Content равен Set-Content, поэтому при изменении Out-File $targetFile на Set-Content $targetFile первая строка больше не будет пустой.

Кроме того,так как вы работаете с CSV-файлом, вы можете использовать Import-CSV для чтения данных и Where-Object для фильтрации по этому конкретному столбцу, хотя для его выполнения требуется небольшая дополнительная работа.укажите заголовки и пропустите их из выходного файла ...

$csvHeaders = 1..17 | ForEach-Object -Process { "Column $_" }
$csvHeaders[11] = 'Status'

Import-Csv -Path $SourceFile.FullName -Header $csvHeaders `
    | Where-Object -Property 'Status' -NE -Value 'SMS Sent' `
    | ConvertTo-Csv -NoTypeInformation `
    | Select-Object -Skip 1 `
    | Set-Content $targetFile

... который записывает ...

"A","400000051115","null","null","null","null","null","null","null","20190312","090300","Answer Machine","2019","3","14","10","0"
"A","400000051117","null","null","null","null","null","null","null","20190312","090300","Confirmed","2019","3","14","10","30"
"A","400000051116","null","null","null","null","null","null","null","20190312","090300","Answer Machine","2019","3","14","11","0"
"A","400000051114","null","null","null","null","null","null","null","20190312","090300","Wants to Cancel","2019","3","14","9","0"
"A","400000051116","null","null","null","null","null","null","null","20190312","093000","Appointment Cancelled/Rescheduled Via SMS","2019","3","14","11","0"

... в $targetFile.Обратите внимание, что все значения указаны в кавычках.Если у вашего входного файла есть заголовки, вы можете просто использовать ...

Import-Csv -Path $SourceFile.FullName `
    | Where-Object -Property 'Status' -NE -Value 'SMS Sent' `
    | Export-Csv -NoTypeInformation -LiteralPath $targetFile

В любом случае выходной файл не будет содержать пустую начальную строку.

...