powershell - 导入-CSV,更改 1 个字段,然后导出
问题描述
我有以下格式的数据(制表符分隔):
Id Dates Number
5 01-01-18<space><tab> 19
5 01-01-18 02-03-18 19
5 01-01-18 02-03-18 03-02-18 19
37 07-09-18 19
37 07-09-18 07-15-18 19
37 07-09-18 07-15-18 07-28-18 18.1
41 03-15-18 19
41 03-15-18 04-15-18 19
41 03-15-18 04-15-18 05-15-18 36.5
第二个字段Dates
实际上是一个带有尾随空格的数组(以空格分隔)。
在修改第二个字段以仅包含最后日期后,我需要将其导入 PowerShell 并导出到新的 CSV 文件:
身份证日期号码 5 01-01-18 19 5 02-03-18 19 5 03-02-18 19 37 07-09-18 19 37 07-15-18 19 37 07-28-18 18.1 41 03-15-18 19 41 04-15-18 19 41 05-15-18 36.5
遍历记录后,除了错误之外,我什么也得不到(所以我没有半工作代码可以发布)。
CSV 文件可以包含多达 100,000 条记录。
所以到目前为止我已经得到了这个:
$ImportDir = "input_dir"
$ExportDir = "output_dir"
# We only want the files generated yesterday
$Date = (Get-Date).AddDays(-1).ToString('yyyyMMdd')
Add-Content ($ExportDir + "blahblah_" + $Date + ".txt") "Id`tDate`tValue"
Get-ChildItem $ImportDir -Filter *_blahblah_$Date.txt | ForEach-Object {
$File = [System.IO.File]::ReadAllText((Resolve-Path $_.FullName))
foreach ($RecordSet In $File) {
$RecordSet.TrimEnd() -Replace "(\d+?)`t.*(\d\d-\d\d-\d\d) `t(\d+?.\d+?) `t", "`$1`t`$2`t`$3" |
#Select-Object -Skip 1 |
Add-Content ($ExportDir + "blahblah_" + $Date + ".txt")
}
}
我转而使用[System.IO.File]
它,因为它比它更快-ReadCount
并且-ReadCount
不知何故丢失了记录。最后一点我需要弄清楚的是如何跳过每个文件的第一行(基本上我正在对许多文件执行这个正则表达式并且需要删除标题)。似乎我所做的任何事情都会导致脚本无法正常工作。
解决方案
即使我认为您将需要使用StreamReader
大文件,这就是我将如何使用Import-CSV
. 请注意,它实际上是列中的最后一个日期,不一定是按时间顺序排列的最后一个日期 [ grin ] ...
# fake reading in a CSV file with tab delimiters
# in real life, use Import-CSV
# each "Dates" column has a trailing <space>
$InStuff = @'
Id Dates Number
5 01-01-18 19
5 01-01-18 02-03-18 19
5 01-01-18 02-03-18 03-02-18 19
37 07-09-18 19
37 07-09-18 07-15-18 19
37 07-09-18 07-15-18 07-28-18 18.1
41 03-15-18 19
41 03-15-18 04-15-18 19
41 03-15-18 04-15-18 05-15-18 36.5
'@ | ConvertFrom-Csv -Delimiter "`t"
$LastDateOnly = foreach ($IS_Item in $InStuff)
{
[PSCustomObject]@{
ID = $IS_Item.Id
Date = $IS_Item.Dates.Trim().Split(' ')[-1]
Number = $IS_Item.Number
}
}
$LastDateOnly
输出 ...
ID Date Number
-- ---- ------
5 01-01-18 19
5 02-03-18 19
5 03-02-18 19
37 07-09-18 19
37 07-15-18 19
37 07-28-18 18.1
41 03-15-18 19
41 04-15-18 19
41 05-15-18 36.5
推荐阅读
- php - 未检索到输入值
- docker - 将 docker-compose 服务也暴露给主机
- java - 如何在 Android Studio 上安装生菜库?
- java - 如何修复 unsatisfiedLinkError 找不到要在 WhatsApp Sticker App 中加载的 dso
- c# - ASP.Net Core“System.IO.DirectoryNotFoundException”在某些站点但不是其他站点
- python - len(int) < 1 时退出
- plotly - 通过下拉列表上传 csv 文件后访问列
- c++ - 如何在结构中声明类模板并稍后初始化?
- flowchart - 允许以任何顺序的流程图节点?
- c# - 释放信号量后确保字段仅由一个线程更新C#