是否可以使用Import-Csv将连续分隔符视为一个?
我有一些txt格式的日志文件,包含双列标签列。 我正在使用以下PowerShell:
Import-Csv C:\path\to\file\PageLog.txt -Delimiter "`t" | Export-Csv C:\path\to\file\PageLog.csv -NoTypeInformation
所以没有什么疯狂的,它正在工作,但我最终与一个自动生成的H1头空列。 那么是否可以将这两个标签作为一个像通过Excel中的“数据”选项卡导入一样? 或者在Export-Csv时忽略空的H1列?
不幸的是,对于Import-CSV
分隔符只能是一个字符长。 这给你两个select。 首先是在文件上使用stringparsing来得到一个分隔符。
(Get-Content C:\path\to\file\PageLog.txt) -replace "`t`t","`t" | Out-File C:\path\to\file\PageLog.temp.txt Import-Csv C:\path\to\file\PageLog.temp.txt -Delimiter "`t" | Export-Csv C:\path\to\file\PageLog.csv -NoTypeInformation
在这种方法中,你可以跳过导入/导出,只需用逗号replace即可。
(Get-Content C:\path\to\file\PageLog.txt) -replace "`t`t",',' | Out-File C:\path\to\file\PageLog.temp.txt
否则,您可以导入csv与额外的列和filter。 正如iRon所build议的,如果你只有一个额外的列,你可以简单地排除它:
Import-Csv C:\path\to\file\PageLog.txt -Delimiter "`t" | Select-Object * -ExcludeProperty H1 | Export-Csv C:\path\to\file\PageLog.csv -NoTypeInformation
如果你有多个, Select-Object
支持通配符,所以你可以使用-ExcludeProperty H*
,假设你的其他列没有以H
开头。
否则,你可以使用正则expression式对列名称。
$CSV = Import-Csv C:\path\to\file\PageLog.txt -Delimiter "`t" $GoodColumns = $CSV | Get-Member -MemberType NoteProperty | Where-Object {$_.name -notmatch '^H\d+$'} | Select-Object -ExpandProperty Name $CSV | Select-Object $GoodColumns | Export-Csv C:\path\to\file\PageLog.csv -NoTypeInformation
您应该能够在.csv上运行search/replacefunction(将两个连续的标签replace为一个,否?
我不知道如果Import-Csv将允许-replace
,但如果不是,您可以将.csv文件转换为string(请参阅Powershell转换.csv格式(Import-csv)到string ),运行 – -replace
它,然后将其转换回.csv。