我有一个CSV文件,其中包含将近4,000多行,并带有随机的空白行和注释,始终以“#”开头。我正在尝试导入CSV文件,同时跳过空白行或以“#”开头的行。我已经尝试过了:
$csvFile = Import-Csv .\example.csv | Where-Object {$_ -notlike '#*'} | Where-Object {$_ -ne ''}
,这不起作用。我也尝试过:
$csvFile = Import-Csv .\example.csv
Get-Content $csvFile | Where-Object {$_ -notlike '#*' | Where-Object {$_ -ne ''} | Set-Content newCSV.csv
这两种情况都会导致文件以所有行导入,并且与原始文件没有任何变化。有一个更好的方法吗?我很困惑。
答案 0 :(得分:2)
这应该可以完成工作:
Get-Content $csvPath | Where-Object { $_ -notmatch '^#|^$' } | Set-Content $strippedCsvPath
^#
匹配以#开头的行,^$
匹配空行。
您可以使用以下代码段简化测试:
$csv = 'line1',
'#line2',
'',
'line4'
$csv | Where-Object { $_ -notmatch '^#|^$' }
如果空格(不重要),如果空行表示仅包含空格的行,则可以将RegEx稍微更改为^\s*#|^\s*$
,如下所示:
$csv = 'line1',
'#line2',
'',
' ',
' #comment',
'line4'
$csv | Where-Object { $_ -notmatch '^\s*#|^\s*$' }