首页 > 解决方案 > PowerShell 将附加数据甚至重复。如何让它仅根据源数据中的日期添加唯一数据?

问题描述

此代码按预期工作,但无论源数据中包含的日期如何,它都会在每次运行时附加 .csv 文件。如果数据不重复,我怎样才能让它只追加?

我已经包含了输出文件“myFilteredReport”的屏幕截图以供参考,因为我希望它检查 TRADEDATE 列,因为有时代码可以在早上运行并包含两天前的数据,然后在下午再次运行并拉昨天的数据。这仅取决于网站何时刷新他们的数据,这是我无法控制的。

powershell.exe wget https://www.cmegroup.com/ftp/pub/settle/nymex_future.csv -outfile "Y:\Test\nymex_futures_$(get-date -f yyyy-MM-dd).csv"


# Import file with latest timestamp:
cd Y:\Test
$futuresFile = gci *.csv | sort lastWriteTime | select -last 1
$futures = import-csv $futuresFile


# Parses .csv file for product codes in text file. Modify product codes as needed.
$myLookups = gc .\NGL_lookup.txt
"lookups loaded: $($mylookups.count)"
$myFUTURES = @()
foreach($lookup in $myLookups){
"processing lookup $lookup..."
$myfutures += $futures |?{$_."product symbol" -like "$lookup"}
}

"Futures found: $($myfutures.count)"

# Remove -Append to overwrite existing data if preferred over append.
$myfutures | export-csv -Append Y:\Test\myFilteredReport.csv -NoTypeInformation


pause

在此处输入图像描述

标签: powershell

解决方案


您应该能够在导出之前检查您的目标报告,类似于您已经在做的查找。您可以将这些步骤添加到现有的 foreach 循环中,以免处理$myfutures两次:

# get the existing data
$FilteredReport = Import-Csv 'Y:\Test\myFilteredReport.csv'

$newFutures = $myfutures | Where {
  $Row = $_

  # check the whole filteredReport for duplicates
  if ( -Not ( $FilteredReport | 
    Where {
      $_.PRODUCT   -EQ $Row.PRODUCT -AND
      $_.TRADEDATE -EQ $Row.TRADEDATE  # I guessed on the field names 
    } 

  # If no duplicates, all good
  )) { return $true }
}

# export your de-duped data:
$newFutures | Export-CSV -Append 'Y:\Test\myFilteredReport.csv'

我个人的偏好是使用Compare-Object. 请记住删除它添加的属性,否则您将获得另一列,并用于-PassThru保留整个对象:

# Compare properties from both lists. Excludes duplicates by default:
$NewFutures = Compare $filteredReport $myfutures -Property PRODUCT,TRADEDATE -PassThru |
  Where { $_.SideIndicator -eq '=>' } |
  Select * -ExcludeProperty SideIndicator  # clean up the SideIndicator field

# export your de-duped data:
$newFutures | Export-CSV -Append 'Y:\Test\myFilteredReport.csv'

推荐阅读