powershell csv从另一列日期值中减去一列日期值,并将结果写入第三列,其中1天等于24小时
您能否帮助我使用powershell脚本: 在CSV文件中,我需要从C列中减去B列日期,并将结果写入A列,格式为1天=24小时,相同日期=12小时 有时列B可以保存将来的值,在这种情况下,列A应该包含负(-) 应该是这样的:powershell csv从另一列日期值中减去一列日期值,并将结果写入第三列,其中1天等于24小时,powershell,Powershell,您能否帮助我使用powershell脚本: 在CSV文件中,我需要从C列中减去B列日期,并将结果写入A列,格式为1天=24小时,相同日期=12小时 有时列B可以保存将来的值,在这种情况下,列A应该包含负(-) 应该是这样的: 120 11/22/2020 11/27/2020 96 11/23/2020 11/27/2020 72 11/24/2020 11/27/2020 48 11/25/2020 11/27/2020 24 11/26
120 11/22/2020 11/27/2020
96 11/23/2020 11/27/2020
72 11/24/2020 11/27/2020
48 11/25/2020 11/27/2020
24 11/26/2020 11/27/2020
12 11/27/2020 11/27/2020
-24 11/28/2020 11/27/2020
-48 11/29/2020 11/27/2020
UPD
我的脚本在减法之前还有两个附加步骤。
我正在获取原始文件,以制表符分隔,将其转换为csv,将其与存档文件进行比较以消除重复项,删除不需要的“SrvDate”列名,并将其替换为“TAT\hh”名称,然后将其导出到文件。因此,唯一缺少的是日期比较,并在“TAT/hh”中填写小时数
以下是示例数据:
Accession SrvDate EntryDate FinalReportDate Patient First Name Patient Last Name DOB Gender Race Ethnicity Patient Address Patient City Patient State Patient Zip Patient Phone Test Code Test Name Result ClientID Client Name Phys ID Phys Name
--------- ------- --------- --------------- ------------------ ----------------- --- ------ ---- --------- --------------- ------------ ------------- ----------- ------------- --------- --------- ------ -------- ----------- -------- ----------
2132900941 NULL 11-24-2020 11-29-2020 MICHELL PENDERGRAS 9/30/1981 F U 35 RUSEVELT ST PRUDENCE RB 2909 (401)516-5642 Z620 Sars-COVID19 Positive 99984 "ASHRAF FARID, M.D." 50845 ATPAV RIGTED
2232900942 NULL 11-25-2020 11-29-2020 MICHEL PENDERGRA 9/30/1982 M U 315 RUSEVELT ST PRUDENCE RB 2909 (401)516-5643 Z620 Sars-COVID19 Positive 99984 "ASHRAF FARID, M.D." 50845 ATPAV RIGTED
2332900943 NULL 11-26-2020 11-29-2020 MICHE PENDERGR 9/30/1983 F U 325 RUSEVELT ST PRUDENCE RB 2909 (401)516-5644 Z620 Sars-COVID19 Positive 99984 "ASHRAF FARID, M.D." 50845 ATPAV RIGTED
2432900944 NULL 11-27-2020 11-29-2020 MICH PENDERG 9/30/1984 M U 335 RUSEVELT ST PRUDENCE RB 2909 (401)516-5645 Z620 Sars-COVID19 Positive 99984 "ASHRAF FARID, M.D." 50845 ATPAV RIGTED
2532900945 NULL 11-28-2020 11-29-2020 ALLISO JEZA 10/13/1977 F U 15 KAUTEEKEE AVE SOUTH PRUDENCE RB 2911 (908)930-9213 Z620 Sars-COVID19 Positive 99984 "ASHRAF FARID, M.D." 50845 ATPAV RIGTED
2632900946 NULL 11-29-2020 11-29-2020 ALLIS JEZ 10/13/1978 M U 151 KAUTEEKEE AVE SOUTH PRUDENCE RB 2911 (908)930-9214 Z620 Sars-COVID19 Positive 99984 "ASHRAF FARID, M.D." 50845 ATPAV RIGTED
2732900947 NULL 11-30-2020 11-29-2020 ALLI JE 10/13/1979 F U 152 KAUTEEKEE AVE SOUTH PRUDENCE RB 2911 (908)930-9215 Z620 Sars-COVID19 Positive 99984 "ASHRAF FARID, M.D." 50845 ATPAV RIGTED
2832900948 NULL 12-1-2020 11-29-2020 ALL J 10/13/1980 M U 153 KAUTEEKEE AVE SOUTH PRUDENCE RB 2911 (908)930-9216 Z620 Sars-COVID19 Positive 99984 "ASHRAF FARID, M.D." 50845 ATPAV RIGTED
脚本:
$in = Import-Csv (Get-ChildItem -Path E:\Test\RI\In\test\In\*.csv).Fullname -Delimiter "`t" | ? "Test Code" -in "Z620","Z630"
$in2 = Import-Csv (Get-ChildItem -Path E:\Test\RI\In\test\Arc\*.csv).Fullname
$pcomp = 'Accession'
$dup = Compare-Object $in $in2 -Property $pcomp -IncludeEqual -ExcludeDifferent -PassThru | Select-Object -ExpandProperty $pcomp
$badhead = $in | Where-Object {$_.$pcomp -notin $dup} | Select-Object *,@{Name='TAT/hh';Expression={$_.'TAT/hh'}} -Exclude 'SrvDate'
$goodhead = $badhead | Select-Object "Accession","TAT/hh","EntryDate","FinalReportDate","Patient First Name","Patient Last Name","DOB","Gender","Race","Ethnicity","Patient Address","Patient City","Patient State","Patient Zip","Patient Phone","Test Code","Test Name","Result","ClientID","Client Name","Phys ID","Phys Name"
if ($goodhead) {$goodhead | Where-Object {$_.$pcomp -notin $dup} | Export-Csv "E:\Test\RI\In\test\Out\Client_PtRecords_$((Get-Date).ToString("yyyyMMdd")).csv" -NoTypeInformation}
样本数据:
Accession SrvDate EntryDate FinalReportDate Patient First Name Patient Last Name DOB Gender Race Ethnicity Patient Address Patient City Patient State Patient Zip Patient Phone Test Code Test Name Result ClientID Client Name Phys ID Phys Name
--------- ------- --------- --------------- ------------------ ----------------- --- ------ ---- --------- --------------- ------------ ------------- ----------- ------------- --------- --------- ------ -------- ----------- -------- ----------
2132900941 NULL 11-24-2020 11-29-2020 MICHELL PENDERGRAS 9/30/1981 F U 35 RUSEVELT ST PRUDENCE RB 2909 (401)516-5642 Z620 Sars-COVID19 Positive 99984 "ASHRAF FARID, M.D." 50845 ATPAV RIGTED
2232900942 NULL 11-25-2020 11-29-2020 MICHEL PENDERGRA 9/30/1982 M U 315 RUSEVELT ST PRUDENCE RB 2909 (401)516-5643 Z620 Sars-COVID19 Positive 99984 "ASHRAF FARID, M.D." 50845 ATPAV RIGTED
2332900943 NULL 11-26-2020 11-29-2020 MICHE PENDERGR 9/30/1983 F U 325 RUSEVELT ST PRUDENCE RB 2909 (401)516-5644 Z620 Sars-COVID19 Positive 99984 "ASHRAF FARID, M.D." 50845 ATPAV RIGTED
2432900944 NULL 11-27-2020 11-29-2020 MICH PENDERG 9/30/1984 M U 335 RUSEVELT ST PRUDENCE RB 2909 (401)516-5645 Z620 Sars-COVID19 Positive 99984 "ASHRAF FARID, M.D." 50845 ATPAV RIGTED
2532900945 NULL 11-28-2020 11-29-2020 ALLISO JEZA 10/13/1977 F U 15 KAUTEEKEE AVE SOUTH PRUDENCE RB 2911 (908)930-9213 Z620 Sars-COVID19 Positive 99984 "ASHRAF FARID, M.D." 50845 ATPAV RIGTED
2632900946 NULL 11-29-2020 11-29-2020 ALLIS JEZ 10/13/1978 M U 151 KAUTEEKEE AVE SOUTH PRUDENCE RB 2911 (908)930-9214 Z620 Sars-COVID19 Positive 99984 "ASHRAF FARID, M.D." 50845 ATPAV RIGTED
2732900947 NULL 11-30-2020 11-29-2020 ALLI JE 10/13/1979 F U 152 KAUTEEKEE AVE SOUTH PRUDENCE RB 2911 (908)930-9215 Z620 Sars-COVID19 Positive 99984 "ASHRAF FARID, M.D." 50845 ATPAV RIGTED
2832900948 NULL 12-1-2020 11-29-2020 ALL J 10/13/1980 M U 153 KAUTEEKEE AVE SOUTH PRUDENCE RB 2911 (908)930-9216 Z620 Sars-COVID19 Positive 99984 "ASHRAF FARID, M.D." 50845 ATPAV RIGTED
UPD
我使用了А挈挈挈的脚本并将其插入到我的中,但我面临着将两种不同计算结果合并的问题
在我的脚本中,我得到的结果标题正确,仅搜索元素,仅当$goodhead中有结果且没有重复项时才导出
在АССц的脚本中,我得到了周转时间的计算值,单位为$tat(我只选择了计算列)
有没有办法将$tat填入$goodhead
这是我的更新代码:
$in = Import-Csv (Get-ChildItem -Path E:\Test\RI\In\test\In\*.csv).Fullname -Delimiter "`t" | ? "Test Code" -in "Z620","Z630"
$in2 = Import-Csv (Get-ChildItem -Path E:\Test\RI\In\test\Arc\*.csv).Fullname
$pcomp = 'Accession'
$dup = Compare-Object $in $in2 -Property $pcomp -IncludeEqual -ExcludeDifferent -PassThru | Select-Object -ExpandProperty $pcomp
$badhead = $in | Where-Object {$_.$pcomp -notin $dup} | Select-Object *,@{Name='TAT/hh';Expression={$_.'TAT/hh'}} -Exclude 'SrvDate'
$goodhead = $badhead | Select-Object "Accession","TAT/hh","EntryDate","FinalReportDate","Patient First Name","Patient Last Name","DOB","Gender","Race","Ethnicity","Patient Address","Patient City","Patient State","Patient Zip","Patient Phone","Test Code","Test Name","Result","ClientID","Client Name","Phys ID","Phys Name"
$tatin = $goodhead | Select-Object * | % {
$EntryDate = [datetime]::parseexact($_.EntryDate, 'yyyy-MM-dd', $null)
$FinalReportDate = [datetime]::parseexact($_.FinalReportDate, 'yyyy-MM-dd', $null)
$tatcalc = switch (($FinalReportDate - $EntryDate).TotalDays){
0 {12}
default {$_ * 24}
}
[PSCustomObject]@{
'TAT/hh' = $tatcalc
EntryDate = $EntryDate
FinalReportDate = $FinalReportDate
}
}
$tat = $tatin | Select "TAT/hh"
if ($tat) {$tat | Sort-Object "Result" -Descending | Export-Csv "E:\Test\RI\In\test\Out\Client_PtRecords_$((Get-Date).ToString("yyyyMMdd")).csv" -NoTypeInformation}
谢谢大家!
另外,我只是Powershell的初学者,尝试在日常任务中学习它。欢迎来到StackOverflow,Aleksandr。用一个源数据示例和您迄今为止尝试过的任何代码片段来编辑您的问题可能会有所帮助。Ryan,谢谢您的建议,我确实更新了。АССа,谢谢您的回答,我试图将您的脚本插入我的脚本中,但不幸的是,我收到的最多是这样一行代码“-17706144 11/26/2020 00:00:00 11/28/2020 00:00:00”,因此我需要找到一种方法将其插入到我的脚本中。在“示例数据”中不是格式良好的CSV,请您解释一下如何将您的代码正确插入到我的脚本中,以便我将接收$goodhead中列出的标题中的所有数据(如我现在所了解的)加上将从您的代码中收到的数据,并将填写在“TAT\hh”列中。谢谢!
$in = Import-Csv (Get-ChildItem -Path D:\tmp\alex\Client_PtRecords_20201203.csv).Fullname -Delimiter "`t" | ? "Test Code" -in "Z620","Z630"
$in2 = Import-Csv (Get-ChildItem -Path D:\tmp\alex\arc\Client_PtRecords_20201202.csv).Fullname
$pcomp = 'Accession'
$dup = Compare-Object $in $in2 -Property $pcomp -IncludeEqual -ExcludeDifferent -PassThru | Select-Object -ExpandProperty $pcomp
$badhead = $in | Where-Object {$_.$pcomp -notin $dup} | Select-Object *,@{Name='TAT/hh';Expression={$_.'TAT/hh'}} -Exclude 'SrvDate'
$goodhead = $badhead | Select-Object "Accession", @{name = "TAT/hh"; expression = {switch(([datetime]::parseexact($_.FinalReportDate, 'yyyy-MM-dd', $null)-[datetime]::parseexact($_.EntryDate, 'yyyy-MM-dd', $null)).TotalDays){ 0 {12}; default {$_ * 24}}}},"EntryDate","FinalReportDate","Patient First Name","Patient Last Name","DOB","Gender","Race","Ethnicity","Patient Address","Patient City","Patient State","Patient Zip","Patient Phone","Test Code","Test Name","Result","ClientID","Client Name","Phys ID","Phys Name"
$tatin = $goodhead | Select-Object *
$tat = $tatin | Select "TAT/hh"
if ($tat) {$tat | Sort-Object "Result" -Descending | Export-Csv "D:\tmp\alex\arc\Client_PtRecords_$((Get-Date).ToString("yyyyMMdd")).csv" -NoTypeInformation}