从多个 CSV 文件和排序逻辑中读取最新内容
Read latest content from multiple CSV files and sort-Logic
我需要获得使用多个 CSV 文件执行一种类型 sorting/filtering 的逻辑。问题是我有 2 个两个 CSV 文件,其中包含一些投资内容。数据如下:
文件A_11012015_123.csv(附加时间戳)
TktNo, AcctID, Rate
1 1 187
2 1 145
7 2 90
文件A_12012015_1345.csv(附加时间戳)
TktNo, AcctID, Rate
1 2 190
2 2 187
3 5 43
预期的输出文件内容
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
输出文件的条件
- 票号应该是唯一的并且是有序的
如果两个文件中的票号相同,则应将最新文件的内容添加到输出文件中。
作为迁移到 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
假设
- 您所有的 csv 文件都在一个位置,如 "c:\temp"。如果需要,请添加
-recurse
- 你说你的日期格式是"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
我需要获得使用多个 CSV 文件执行一种类型 sorting/filtering 的逻辑。问题是我有 2 个两个 CSV 文件,其中包含一些投资内容。数据如下:
文件A_11012015_123.csv(附加时间戳)
TktNo, AcctID, Rate 1 1 187 2 1 145 7 2 90
文件A_12012015_1345.csv(附加时间戳)
TktNo, AcctID, Rate 1 2 190 2 2 187 3 5 43
预期的输出文件内容
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
输出文件的条件
- 票号应该是唯一的并且是有序的
如果两个文件中的票号相同,则应将最新文件的内容添加到输出文件中。
作为迁移到 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
假设
- 您所有的 csv 文件都在一个位置,如 "c:\temp"。如果需要,请添加
-recurse
- 你说你的日期格式是"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