首页 > 解决方案 > 如何在powershell中打开一个csv并复制其中一列,所以我现在有两列具有相同的数据,但名称不同?

问题描述

我有一个使用 import-csv 命令导入的 csv,如下所示:

emailAddress,   event,  tokenDate,  Yadda1, Yadda2
aaaa@bbb.com,   A1234,  23/03/2020, 98765,  54321
bbbb@ccc.com,   B2345,  23/03/2020, 87654,  32109
cccc@ddd.com,   C3456,  23/03/2020, 76543,  21098

我有导入 csv 的代码,不包括我不想要的一些列(yadda1,yadda2),然后重命名它导入的标题。

导入和重命名后,我的代码将 status_date 列数据更改为 unixtime 格式,并且效果很好。

我现在需要做的是添加一个名为“status_date2”的新列,其中包含与每一行的status_date完全相同的数据,所以如果第50行的status_date包含unixtime值1584370028,那么第50行的新status_date2需要现在也保存值 1584370028。

我试图做这样的事情,我认为它只是取 status_date 的值,但是 status_date2 列一直是空的 - 请帮助!!!

@{Name='status_date2';Expression={$_."status_date"}} 

代码如下所示:

Import-Csv "c:\temp\myCSV.csv" |
Select * -ExcludeProperty "emailAddress", "event", "tokenDate" |

# Rename the column headers, for exmaple: rename from emailAddress to email_address


select -Property @{label="email_address";expression={$($_."emailAddress")}}, 
@{label="status";expression={$($_."event")}},
@{label="status_date";expression={$($_."tokenDate")}},

#Replace the date column data with unixtime format
% {$_.status_date = (Get-Date($_.status_date) -UFormat %s); $_} |

# Add a new column with current date/time is unixtime format for the CRM
@{Name='status_date2';Expression={Get-Date -UFormat %s}} |

标签: powershellcsv

解决方案


您可以只进行两次相同的计算(对于仅翻译字段,您可以简单地将名称指定为Expression值):

Import-Csv "c:\temp\myCSV.csv" |Select -Property @{Label="email_address";Expression="emailAddress"}, 
@{Label="status";Expression="event"},
@{Label="status_date";expression={Get-Date $_."tokenDate" -UFormat %s}},
@{Label="status_date2";expression={Get-Date $_."tokenDate" -UFormat %s}}

推荐阅读