2016-11-25 128 views
0

我无法对一系列CSV文件进行一些更改,所有这些都具有相同的数据结构。我试图将所有文件合并为一个CSV文件或一个制表符分隔的文本文件(不介意),但每个文件需要删除2个空行并删除两个列,下面是一个示例:Powershell从CSV中删除列和行

col1,col2,col3,col4,col5,col6 <-remove 
col1,col2,col3,col4,col5,col6 <-remove 
col1,col2,col3,col4,col5,col6 
col1,col2,col3,col4,col5,col6 
      ^  ^
     remove  remove 

End Result: 

col1,col2,col4,col6 
col1,col2,col4,col6 

这是我在做这样的尝试(我很新的PowerShell的)

$ListofFiles = "example.csv" #this is an list of all the CSV files 
ForEach ($file in $ListofFiles) 
{ 
$content = Get-Content ($file) 
$content = $content[2..($content.Count)] 

$contentArray = @() 
[string[]]$contentArray = $content -split "," 
$content = $content[0..2 + 4 + 6] 

Add-Content '...\output.txt' $content 
} 

我要去哪里错在这里...

回答

1

你的榜样文件应该被读取, before foreach取文件列表

$ListofFiles = get-content "example.csv" 

在foreach里面你得到mainfile的内容

$content = Get-Content ($ListofFiles) 

,而不是

$content = Get-Content $file 

和删除行,我会推荐这款:

$obj = get-content C:\t.csv | select -Index 0,1,3 

去除列(列号0,1,3,5):

$obj | %{(($_.split(","))[0,1,3,5]) -join "," } | out-file test.csv -Append 
0

根据实际情况初步文件看起来像

col1,col2,col3,col4,col5,col6 
col1,col2,col3,col4,col5,col6 
,,,,, 
,,,,, 

你也可以试试这个衬垫

Import-Csv D:\temp\*.csv -Header 'C1','C2','C3','C4','C5','C6' | where {$_.c1 -ne ''} | select -Property 'C1','C2','C5' | Export-Csv 'd:\temp\final.csv' -NoTypeInformation 

根据的事实,你的CSV具有所有的相同的结构,你可以直接打开它们提供标题,然后删除缺少数据的对象,然后将所有对象导出到csv文件中。

-1

指定虚构的列名称(列号可能超过文件中的列数),更改所需位置并排除不希望占用的列就足够了。

gci "c:\yourdirwithcsv" -file -filter *.csv | 
    %{ Import-Csv $_.FullName -Header C1,C2,C3,C4,C5,C6 | 
     where C1 -ne '' | 
      select -ExcludeProperty C3, C4 | 
       export-csv "c:\temp\merged.csv" -NoTypeInformation 
    }