2016-11-25 156 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 
    }