我有一个导入的CSV文件,我需要更改列的格式(backed_up_ts)以删除列中的原始数据并将其替换为更新的格式。
列中每行的原始数据如下所示:
Tue Sep 13 07:46:26 MDT 2016
我的代码的第一部分格式化每一行,以便可以将其与日期进行比较:
$csv = Import-Csv -Path "C:\Users\user\Desktop\NewReport.csv" | Select display_client_name, backed_up_ts
$csv = foreach ($budate in $csv.backed_up_ts) {
$budate = $budate.Substring(3)
$budate = $budate.Replace("MDT", "")
$budate = $budate.Replace("MST", "")
$budate = $budate.Split(" ")
$budate = $budate[1] + " " + $budate[2] + " " + $budate[5]
$budate = ($budate | Get-Date -Format d)
从这里开始,我需要采用更新的格式(在$budate
值中)并替换$csv.backed_up_ts
数组中的原始数据。
但是,$budate
的值只是foreach循环中对象的最后一个值(3/30/16)。
$csv.backed_up_ts
的值以原始格式保留在数组中(2016年8月30日星期三,美国东部时间)。
我需要将原始数组$csv.backed_up_ts
替换为$budate
创建的协调值。
感谢。
答案 0 :(得分:1)
根据所需的数据转换说明更新了答案。
代码的
# demonstrate changing columnn data in csv input
$input = @"
header1, header2
value11, "Tue Sep 13 07:46:26 MDT 2016"
value21, "Tue Oct 19 07:46:26 MDT 2017"
"@
$csv = ConvertFrom-Csv $input
"original"
$csv
foreach ($item in $csv)
{
# modify the header2 column in our csv input
$parts = $item.header2.Split(' ')
$newDate = $parts[1] + " " + $parts[2] + " " + $parts[5]
$item.header2 = [DateTime]::Parse($newDate) | Get-Date -Format d
}
"new"
$csv
输出
original
header1 header2
------- -------
value11 Tue Sep 13 07:46:26 MDT 2016
value21 Tue Oct 19 07:46:26 MDT 2017
new
value11 9/13/2016
value21 10/19/2017