Powershell从CSV中删除列和行

时间:2016-11-25 04:14:54

标签: powershell csv

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

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
} 

我在哪里错了...

3 个答案:

答案 0 :(得分:1)

应该在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

答案 1 :(得分: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文件中的所有对象。

答案 2 :(得分:-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
    }