我无法对一系列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
}
我在哪里错了...
答案 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
}