使用 Powershell 从 CSV 文件中删除行
Remove lines from CSV file using Powershell
我有一个包含日志记录信息的 CSV 文件。 Date/time 文件中的信息以 UNIX 时间戳格式写入。
我想删除所有超过 5 分钟的台词。我使用以下代码来执行此操作:
$FiveMinutesAgo=(Get-Date ((get-date).toUniversalTime()) -UFormat +%s).SubString(0,10)-300
$Content = Import-Csv "logfile.csv" | where {$_.DateCompleted -gt $FiveMinutesAgo}
$Content | Export-Csv -delimiter ";" -NoTypeInformation -encoding UTF8 -Path 'logfile.csv'
CSV 文件如下所示:
"DateInitiated";"DateStarted";"DateCompleted";"InitiatedBy";"Action";"Status"
"1496659208";"1496659264";"1496752840";"administrator";"Reboot server";"Completed"
无论五分钟是否已经过去,我的 CSV 文件在执行上面的脚本行后最终完全是空的。
我无法在测试中复制它(但可能需要实际的源文件)。我认为问题在于您还需要在 Import-CSV
上指定编码和分隔符(正如您在导出时已经拥有的那样)。
试试这个:
$FiveMinutesAgo=(Get-Date ((get-date).toUniversalTime()) -UFormat +%s).SubString(0,10)-300
$Content = Import-Csv "test.csv" -Delimiter ';' -Encoding UTF8 | where {$_.DateCompleted -gt $FiveMinutesAgo}
$Content | Export-Csv -delimiter ";" -NoTypeInformation -encoding UTF8 -Path 'logfile.csv'
我有一个包含日志记录信息的 CSV 文件。 Date/time 文件中的信息以 UNIX 时间戳格式写入。
我想删除所有超过 5 分钟的台词。我使用以下代码来执行此操作:
$FiveMinutesAgo=(Get-Date ((get-date).toUniversalTime()) -UFormat +%s).SubString(0,10)-300
$Content = Import-Csv "logfile.csv" | where {$_.DateCompleted -gt $FiveMinutesAgo}
$Content | Export-Csv -delimiter ";" -NoTypeInformation -encoding UTF8 -Path 'logfile.csv'
CSV 文件如下所示:
"DateInitiated";"DateStarted";"DateCompleted";"InitiatedBy";"Action";"Status"
"1496659208";"1496659264";"1496752840";"administrator";"Reboot server";"Completed"
无论五分钟是否已经过去,我的 CSV 文件在执行上面的脚本行后最终完全是空的。
我无法在测试中复制它(但可能需要实际的源文件)。我认为问题在于您还需要在 Import-CSV
上指定编码和分隔符(正如您在导出时已经拥有的那样)。
试试这个:
$FiveMinutesAgo=(Get-Date ((get-date).toUniversalTime()) -UFormat +%s).SubString(0,10)-300
$Content = Import-Csv "test.csv" -Delimiter ';' -Encoding UTF8 | where {$_.DateCompleted -gt $FiveMinutesAgo}
$Content | Export-Csv -delimiter ";" -NoTypeInformation -encoding UTF8 -Path 'logfile.csv'