Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
powershell csv从另一列日期值中减去一列日期值,并将结果写入第三列,其中1天等于24小时_Powershell - Fatal编程技术网

powershell csv从另一列日期值中减去一列日期值,并将结果写入第三列,其中1天等于24小时

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

您能否帮助我使用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/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}