从多个 CSV 文件和排序逻辑中读取最新内容

Read latest content from multiple CSV files and sort-Logic

我需要获得使用多个 CSV 文件执行一种类型 sorting/filtering 的逻辑。问题是我有 2 个两个 CSV 文件,其中包含一些投资内容。数据如下:

预期的输出文件内容

TktNo, AcctID, Rate
 1      2       190
 2      2       187
 3      5       43
 7      2       90

尝试过的东西,不完全一样

  $output=@()
  foreach(..)(multple files)
  {
  $output+=Get -Content -path $csv| sort "TktNo: - Unique
   }
   export $output

输出文件的条件

  1. 票号应该是唯一的并且是有序的
  2. 如果两个文件中的票号相同,则应将最新文件的内容添加到输出文件中。

    作为迁移到 power 的一部分 shell 我也是初学者,如果有人能帮助我实现,我将不胜感激。

此代码假设了一些我试图在评论中解决的问题。更多描述如下。

Get-ChildItem C:\temp -Filter *.csv | ForEach-Object{
    $rawDate = ($_.BaseName -split "_",2)[1]
    $filedate = [datetime]::ParseExact($rawDate,"MMddyyyy_HHmmss",[System.Globalization.CultureInfo]::CurrentCulture)
    Import-csv $_ | Add-Member -MemberType NoteProperty -Name "Date" -Value $filedate -PassThru
} | Group-Object tktno | ForEach-Object{
    $_.Group | Sort-Object Date | Select -Last 1
} | Select-Object TktNo,AcctID,Rate | Sort-Object TktNo

假设

  1. 您所有的 csv 文件都在一个位置,如 "c:\temp"。如果需要,请添加 -recurse
  2. 你说你的日期格式是"mmddyyyy_hhmmss"。示例文件时间与此不一致。我编辑文件名以使用 "MMddyyyy_HHmmss"。 "File A_11012015_123321.csv" 和 "File A_12012015_134522.csv"

细分

有多种方法可以做到这一点,但我们在这里使用的一种简单方法是 Group-Object。只要您没有 100 个这些文件和 1000 个条目,它就可以解决问题。

获取每个文件并为每个条目附加其文件数据 Import-csv $_ | Add-Member -MemberType NoteProperty -Name "Date" -Value $filedate -PassThru。例如你会:

TktNo    AcctID    Rate    Date    
-----    ------    ----    ----    
1        1         187     11/1/2015 12:33:21 PM    
2        1         145     11/1/2015 12:33:21 PM    
7        2         90      11/1/2015 12:33:21 PM    

我们获取所有这些文件并根据 tktno 将它们组合在一起。在创建的每个组中,按我们之前创建的日期 属性 和使用 Select -Last 1 的当前条目 return 对它们进行排序。删除日期 属性 并将剩余数据排序 tktno

至于输出,您可以将其附加到末尾。

} | Select-Object TktNo,AcctID,Rate | Sort-Object TktNo | Export-CSV "C:\somepath.csv" -NoTypeInformation