在Powershell中使用Import-CSV,忽略注释行

时间:2013-08-02 21:01:49

标签: powershell

我认为我必须遗漏一些明显的东西,因为我正在尝试使用Import-CSV导入文件顶部已注释掉行(总是以#作为第一个字符开头)的CSV文件,所以该文件如下所示:

#[SpecialCSV],,,,,,,,,,,,,,,,,,,,
#Version,1.0.0,,,,,,,,,,,,,,,,,,,
#,,,,,,,,,,,,,,,,,,,,
#,,,,,,,,,,,,,,,,,,,,
#[Table],,,,,,,,,,,,,,,,,,,,
Header1,Header2,Header3,Header4,Header5,Header6,Header7,...
Data1,Data2,Data3,Data4,Data5,Data6,Data7,...

我想忽略前5行,但仍然使用Import-csv将其余信息很好地输入到Powershell中。

由于

3 个答案:

答案 0 :(得分:7)

简单 - 只需使用选择字符串排除带有正则表达式的注释行,然后通过管道转到 ConvertFrom-Csv

Get-Content <path to CSV file> | Select-String '^[^#]' | ConvertFrom-Csv

Import-Csv ConvertTo-Csv 之间的区别在于前者从文件中获取输入,后者接受管道输入,否则它们执行相同的操作 - 将CSV数据转换为PSCustomObjects数组。因此,通过使用 ConvertFrom-Csv ,您可以在不修改CSV文件或使用临时文件的情况下执行此操作。您可以将结果分配到数组或管道到 Foreach-Object 块,就像使用 Import-Csv 一样:

$array = Get-Content <path to CSV file> | Select-String '^[^#]' | ConvertFrom-Csv

Get-Content <path to CSV file> | Select-String '^[^#]' | ConvertFrom-Csv | %{
  <whatever you want do with the data>
}

答案 1 :(得分:4)

CSV没有“评论”的概念 - 它只是平面数据。您需要使用Get-Content并检查每一行。如果一行以#开头,请忽略它,否则处理它。

如果您对使用临时文件感到满意:

Get-content special.csv |where-object{!$_.StartsWith("#")}|add-content -path $(join-path -path $env:temp -childpath "special-filtered.csv");
$mydata = import-csv -path $(join-path -path $env:temp -childpath "special-filtered.csv");
remove-item -path $(join-path -path $env:temp -childpath "special-filtered.csv")
$mydata |format-table -autosize; #Just for illustration

修改:忘记了convertfrom-csv。这种方式变得更加简单。

$mydata = Get-Content special.csv |
    Where-Object { !$_.StartsWith("#") } |
    ConvertFrom-Csv

答案 2 :(得分:1)

如果将convertfrom-csv csv数据作为行数组提供,它似乎会自动过滤掉注释。我经常以这种方式使用convertfrom-csv,但是我没有看到它的记录。

cat  data.csv | convertfrom-csv      #skips commented lines automagically


("co1,col2,col3",  "abc,def,ghi", "#this,is,a,comment", "abc1,def1,ghi1")|convertfrom-csv


co1  col2 col3
---  ---- ----
abc  def  ghi 
abc1 def1 ghi1

但是,以下内容不会跳过注释:

"co1,col2,col3
abc,def,ghi
#this,is,a,comment
abc1,def1,ghi1
"|convertfrom-csv


co1   col2 col3
---   ---- ----
abc   def  ghi 
#this is   a   
abc1  def1 ghi1