Excel 是否可以使用导入Csv将连续分隔符视为一个分隔符?
我有一些txt格式的日志文件,其中包含双选项卡列。 我正在使用以下PowerShell:Excel 是否可以使用导入Csv将连续分隔符视为一个分隔符?,excel,powershell,export-to-csv,powershell-ise,Excel,Powershell,Export To Csv,Powershell Ise,我有一些txt格式的日志文件,其中包含双选项卡列。 我正在使用以下PowerShell: Import-Csv C:\path\to\file\PageLog.txt -Delimiter "`t" | Export-Csv C:\path\to\file\PageLog.csv -NoTypeInformation 所以这里没有什么疯狂的地方,它正在工作,但我最终得到一个空列,带有一个自动生成的H1头。那么,在通过Excel中的“数据”选项卡导入时,我是否可以将这两个选项卡视为一个?或者在导
Import-Csv C:\path\to\file\PageLog.txt -Delimiter "`t" | Export-Csv C:\path\to\file\PageLog.csv -NoTypeInformation
所以这里没有什么疯狂的地方,它正在工作,但我最终得到一个空列,带有一个自动生成的H1头。那么,在通过Excel中的“数据”选项卡导入时,我是否可以将这两个选项卡视为一个?或者在导出Csv时以某种方式忽略空的H1列?您应该能够在.Csv上运行搜索/替换功能(将两个连续的选项卡替换为一个,否?)
我不知道导入Csv是否允许
-replace
,但如果不允许,您可以将.Csv文件转换为字符串(请参阅),在其上运行-replace
,然后将其转换回.Csv。不幸的是,对于导入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
使用
。|选择*-ExcludeProperty H1 |…
,请参阅:导入后排除H1列是最快速、最简单的解决方案。起初我尝试了Get-Content cmdlet,但似乎-replace不是一个有效的参数???@Heath我忘记包装Get-Content命令,-replace
不是一个参数,而是regex操作符。答案更新。是的,更新后的答案也很有效。非常感谢。你是对的,搜索/替换是我的第一个想法,但是我现在还有很多事情要做,所以我不想对日志文件进行太多的手动修改。谢谢你的链接,顺便说一句,非常好。