【发布时间】:2018-08-06 14:37:13
【问题描述】:
每天早上我都有一个生成 CSV 文件的报告,该文件包含计算机名称以及整个文件中的其他 cmets。作为注释的每一行都以“#”开头,并且 cmets 分散在整个文档中,而不仅仅是在文档的开头,所以我不能只阅读前几行。
有没有办法搜索 CSV 文件并删除以“#”开头的行?或者有没有办法选择不以“#”开头的行,并将它们保存为新文件?
【问题讨论】:
标签: powershell csv search
每天早上我都有一个生成 CSV 文件的报告,该文件包含计算机名称以及整个文件中的其他 cmets。作为注释的每一行都以“#”开头,并且 cmets 分散在整个文档中,而不仅仅是在文档的开头,所以我不能只阅读前几行。
有没有办法搜索 CSV 文件并删除以“#”开头的行?或者有没有办法选择不以“#”开头的行,并将它们保存为新文件?
【问题讨论】:
标签: powershell csv search
是的,当然。
您可以逐行读取文件,然后简单地过滤掉以#开头的任何内容:
Get-Content $csvPath |Where-Object {$_ -notlike '#*'} |Set-Content $newCsvPath
【讨论】:
#之前可能有一个或多个空格或制表符,您可以改用{ $_ -notmatch '^\s*#' }。
foreach ($thing in $csv) {
if ($thing.StartsWith("#")) {
continue
} else {
#insert what you want to do here
}
}
【讨论】:
您的duplicate question 提到您还想过滤掉空行。这将做到这一点:
Get-Content "inputfile.csv" |
Where-Object { $_ -notmatch '(^\s*$)|(^\s*#)' } |
Set-Content "outputfile.csv"
【讨论】: