我有一些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列?
答案 0 :(得分:3)
不幸的是,Import-CSV
分隔符只能是一个字符长。这有两个选择。首先是在文件上使用字符串解析来分解为一个分隔符。
(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
在此方法中,您可以跳过导入/导出,只需用逗号替换。
(Get-Content C:\path\to\file\PageLog.txt) -replace "`t`t",',' | Out-File C:\path\to\file\PageLog.temp.txt
否则,您可以使用额外的列和过滤器导入csv。正如iRon建议的那样,如果你只有一个额外的列,你可以简单地排除它:
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
开头。
否则你可以使用正则表达式对列名称。
$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
答案 1 :(得分:2)
您应该可以在.csv上运行搜索/替换功能(用一个替换两个连续的选项卡,不是吗?)
我不知道Import-Csv是否允许-replace
,但如果没有,您可以将.csv文件转换为字符串(请参阅Powershell Converting .csv format (Import-csv) to string),运行-replace
在它上面,然后将其转换回.csv。