powershell - Powershell csv仅在特定列中查找带有反斜杠的值并重命名它们
问题描述
我正在尝试过滤“结果”列中的 csv 文件以获取带有反斜杠的值,然后用适当的名称重命名它们。
这是example.csv
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,09/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, Negative,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, \989,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, \990,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, \61,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, \990,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, @,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
\990 应命名为“推定阳性”
\989 应命名为“无效”
\61 应命名为“QNS”
这是我试图用来简单地过滤反斜杠值的脚本,但后来我卡住了:
$inval = [regex]::escape('\989')
$prespos = [regex]::escape('\990')
$in = Import-Csv (Get-ChildItem -Path C:\example.csv).Fullname | ? "Result" -in $inval, $prespos
或像这样:
$in = Import-Csv (Get-ChildItem -Path C:\example.csv).Fullname | ? "Result" -in "\990", "\989"
但是变量 $in 没有输出。
你能帮我解决吗。
谢谢!
解决方案
Result
如果该字段包含与您要替换的数据完全匹配的内容,我会执行以下操作。
# read Csv as object in $data
$data = Import-Csv example.csv
# hash of replacement values
$hash = @{'\990' = 'Presumptive Positive'; '\989' = 'Invalid'; '\61' = 'QNS'}
# only select rows that need to be replaced
foreach ($row in $data | Where Result -in $hash.keys) {
# update current row result with replacement value
$row.Result = $hash[$row.Result]
}
# output object as CSV
$data | Export-Csv output.csv -NoType
推荐阅读
- python - Pandas 数据框中的 SQL 查询等价物
- python - 如何避免类的属性错误?
- r - 如何将 (1) Yes 和 (2) No 更改为 0 和 1?
- macos - 将输出传送到另一个延迟命令时如何暂停主命令
- javascript - Typescript - 导入 Express 不起作用
- python - crontab 调用 shell 脚本出现导入错误
- acumatica - 如何更改销售订单页面中选项卡的顺序
- c++ - QML 中的 viewRoot 是什么?
- javascript - Javascript Ajax 上传文件到 Python 后端
- linux - 如何修复此脚本以获得正确的输出?