2013-03-03 138 views
0

我是Powerhell的新手。目前我们需要一个poweshell脚本来比较两个大的(100000行和n列(n> 300,列标题是每个星期三对应的日期).n的值每周都在文件中不断递增。比较文件(当前周和上周),并且需要确保两个文件之间的唯一区别是最后一列。从powershell中的csv文件中删除最后一列

我已经经历了一些论坛和博客,并且我只能做很少的因为我的无知

如果有一种方法可以从powershell中的csv文件中删除最后一列,我们可以使用下面的脚本来比较上一周的文件和当前的一周的文件,本周档案的最后一列

这将是非常有益的,如果有人可以帮助我在这里与你辛苦赚来的知识


[System.Collections.ArrayList]$file1Array = Get-Content "C:\Risk Management\ref_previous.csv"|Sort-Object 
[System.Collections.ArrayList]$file2Array = Get-Content "C:\Risk Management\ref_current.csv"|Sort-Object 
$matchingEntries = @() 

foreach ($entry in $file1Array) { 
    if ($file2Array.Contains($entry)) { 
     $matchingEntries += $entry 
     } 
    } 
foreach ($entry in $matchingEntries){ 
    $file1Array.Remove($entry) 
    $file2Array.Remove($entry) 
    } 

干杯, 阿尼尔

回答

1

假设你要排除的列名是LastCol(调整到您的实际栏目名称):

$previous = Import-csv "C:\Risk Management\ref_previous.csv" | Select-Object -Property * -ExcludeProperty LastCol | Sort-Object; 
$current = Import-csv "C:\Risk Management\ref_current.csv" | Sort-Object; 
Compare-Object $previous $current; 

这将删除每个输入文件的最后一列,并指出剩余内容是否不同。

+0

嗨,谢谢你的回答。实际上最后一列名称每周变化不定,我们正在寻找一个opton以动态方式查找当前文件的最后一列名称。 – Anil 2013-03-03 21:02:58

+0

此外,我们需要删除当前文件中的最后一列。 – Anil 2013-03-03 21:08:40

+0

您的第二条评论已被编辑解决。只要删除'选择对象'。 – alroc 2013-03-03 21:14:46

1

根据alroc给出的答案,您应该能够在CSV文件的第一行使用拆分操作获取最后一列名称,然后使用-ExcludeProperty参数。

但是,这个比较对象命令不适用于我,但它确实将正确的数据拉回到每个变量中。

$CurrentFile = "C:\Temp\Current.csv" 
$PreviousFile = "C:\Temp\Previous.csv" 

$CurrentHeaders = gc $CurrentFile | Select -First 1 
$CurrentHeadersSplit = $CurrentHeaders.Split(",") 
$LastColumn = $CurrentHeadersSplit[-1] -Replace '"' 

$Current = Import-Csv $CurrentFile | Select -Property * -ExcludeProperty $LastColumn | Sort-Object 
$Previous = Import-Csv $PreviousFile | Sort-Object 
Compare-Object $Current $Previous 
0

import-csv和export-csv都提供排除列的机会。

import-csv具有-header选项,您只需简单命名传入标题并排除最后一个列标题即可。如果有10列,则只有名称9.最后一列将被排除。

对于export-csv,请选择要写出的列(| select col1,col2,col3 | export-csv ...),并且不要选择您要排除的列。

+0

嗨,詹金斯先生,谢谢你的回应。但是大约有300列,很难列出给用户 – Anil 2013-03-05 11:01:58