У меня есть данные (с разделителями табуляции) в следующем формате:
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 после изменения второго поля, чтобы включить только последнюю дату:
Id Dates 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
Я не смог получить ничего, кроме ошибок после итерациизаписей (поэтому у меня нет полу-рабочего кода для публикации вместе с этим).
CSV-файл может содержать до 100 000 записей.
Итак, я получил это такfar:
$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
как-то терял записи.Последнее, что мне нужно выяснить, это то, как пропустить первую строку каждого файла (в основном я выполняю это регулярное выражение для многих файлов и мне нужно удалить заголовки).Похоже, все, что я делаю, приводит к тому, что скрипт не работает.