【问题标题】:Import data from txt file into CSV file specific column将 txt 文件中的数据导入 CSV 文件特定列
【发布时间】:2020-04-21 07:32:03
【问题描述】:

enter code here我有两个文件,一个是txt,第二个是CSV。我想将 txt 文件导入 csv 文件中的特定列“开始”,最后一列将重复相同的操作,但第一个数据需要转换为 unix 时间。

File1 - unix 日期

1586890800
1586930400
1586930400
1586959200
1586959200
1586941200
1586959200
1586941200
1586442240

CSV 文件:

ID (Link);CI;Status;Start;Scheduled End Date Time
126925;TESTA;Scheduled;14.04.2020 19:00;14.04.2020 20:00
127197;TESTB;Scheduled;15.04.2020 06:00;15.04.2020 14:00
158063;TESTAAA;Scheduled;15.04.2020 06:00;15.04.2020 10:00
163314;TESTBAAA;Scheduled;15.04.2020 14:00;22.04.2020 23:00
167023;TESTAdsadasd;Scheduled;15.04.2020 14:00;22.04.2020 23:00
177425;TESTBasdasd;Scheduled;15.04.2020 09:00;15.04.2020 12:00
178658;sadfsdfsd;Scheduled;15.04.2020 14:00;16.04.2020 23:00
179558;TESTBsdfsdfsdf;Scheduled;15.04.2020 09:00;20.04.2020 05:00
179558;TESTCEST;Scheduled;09.04.2020 14:24;20.04.2020 05:00

到目前为止,我有这样的事情:

$Start = Get-Content "C:\Users\start.txt"
Import-Csv "C:\Users\table.csv"  -Delimiter ';' | 
   ForEach-Object { $_.Start = $Start; $_ } | 
  Export-Csv "C:\Users\table.csv" -Delimiter ';' -NoTypeInformation

结果: ID(链接);CI;状态;开始;计划结束日期时间

126925;TESTA;Scheduled;1586890800;14.04.2020 20:00
127197;TESTB;Scheduled;1586930400;15.04.2020 14:00
158063;TESTAAA;Scheduled;1586930400;15.04.2020 10:00
163314;TESTBAAA;Scheduled;1586959200;22.04.2020 23:00
167023;TESTAdsadasd;Scheduled;1586959200;22.04.2020 23:00
177425;TESTBasdasd;Scheduled;1586941200;15.04.2020 12:00
178658;sadfsdfsd;Scheduled;1586959200;16.04.2020 23:00
179558;TESTBsdfsdfsdf;Scheduled;1586941200;20.04.2020 05:00
179558;TESTCEST;Scheduled;1586442240;20.04.2020 05:00

【问题讨论】:

  • 您真的只是想将 CSV 文件中的 DateTime 值转换为 Unix 时间吗?这可能会帮助你In PowerShell, how do I convert DateTime to UNIX time?
  • 您不应将输出保存到另一个文件中,而应将其保存在您需要的位置 - 在 CSV 文件中。
  • @Olaf 我已经将日期转换为 Unix 时间,脚本的第一部分正在执行:1. 从 CSV 开始列中获取数据作为正常日期 14.04.2020 19:00 2. 转换正常日期 14.04。 2020 19:00 并将转换后的日期作为 1586890800 保存到 txt 文件中 3. 将转换后的日期添加到列中 :) 我不是程序员,也许有更好的理由这样做 :) 如果首先我从该列中获取日期并转换为另一个日期格式所以everhting应该匹配,对吧?行数等等?我说的对吗?

标签: powershell


【解决方案1】:

根据 Signal15 在这个问题In PowerShell, how do I convert DateTime to UNIX time? 中的回答,有一种稍微简单的方法可以将 DateTime 对象格式化为 Unix 格式。

$CSV = Import-Csv C:\Users\table.csv  -Delimiter ';'
    $CSV | ForEach-Object {
    if ($_.Start){$_.Start = [Math]::Floor([decimal](Get-Date(Get-Date $_.Start).ToUniversalTime()-uformat "%s"))}
    if($_.'Scheduled End Date Time'){$_.'Scheduled End Date Time' = [Math]::Floor([decimal](Get-Date(Get-Date $_.'Scheduled End Date Time').ToUniversalTime()-uformat "%s"))}
}  
$CSV | 
Export-Csv C:\Users\newtable.csv -Delimiter ';' -NoTypeInformation

【讨论】:

  • 我厌倦了上面的两个代码,但是对于两个我都有空文件作为结果,执行过程中没有错误。
  • 请立即尝试第二个版本。
  • 现在可以正常工作了,之前的有什么问题吗?我刚刚添加到计算 7200 以更改结果中的时区。
  • 我自己无法解释。但我很高兴它现在可以工作了。 ;-)
  • 有没有办法添加验证,例如,如果列中缺少字符串,则跳到下一行
猜你喜欢
  • 2015-12-13
  • 1970-01-01
  • 2019-07-19
  • 2017-07-14
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-23
相关资源
最近更新 更多