powershell - 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
解决方案
您应该能够在导出之前检查您的目标报告,类似于您已经在做的查找。您可以将这些步骤添加到现有的 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'
推荐阅读
- codenameone - 使用 JDK 11 播放常规和循环声音?
- reactjs - 如何使用钩子在 React 中编辑我的待办事项?
- c++ - 在 C++ 中将不同类型的变量存储在一个实体中
- python - 布局更改时调整 QGraphicsScene 的大小
- python - 尝试创建一个函数,当您输入一串数字时,如果数字的长度为 4 或 6 并且它们都是数字,则返回 true
- python - 海博恩。TypeError:无法根据规则“安全”将数组数据从 dtype('int64') 转换为 dtype('int32')
- javascript - Javascript Array.map() 函数
- google-chrome-devtools - 在 Chrome Web 开发者的 Coverage 记录中一一加载文件
- arrays - 使用索引寻址访问数组元素
- html - CSS white-space nowrap 扩展 flexbox 的子宽度