是否可以使用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。