파일(A.txt; sep=",")이 있습니다.
kit
Software Version =
Date And Time of Export =
Experiment Name =
Instrument Software Version =
Instrument Type = CFX
Instrument Serial Number =
Run Start Date =
Run End Date =
Run Operator =
Batch Status = VALID
Method = Novaprime
Date And Time of Export,Batch ID,Sample Name,Well,Sample Type,Status,Interpretive Result,Action*,Curve analysis
,,205920777.1,A01,Unkn-01,,,
,,neg5,A02,Neg Ctrl-01,,,
,,pos6,A03,Pos Ctrl-01,,,
,,,,,,,,,,
*reporting.
"Sample Type" 열에 "Unkn"인 경우 "Patient"라는 패턴이 포함된 경우 "Explained Results" 열에 "Negative"인 경우 "NC", "Pos"인 경우 "PC"를 인쇄하고 싶습니다. 다음 출력을 얻으려면(B.txt; sep=","):
kit
Software Version =
Date And Time of Export =
Experiment Name =
Instrument Software Version =
Instrument Type = CFX
Instrument Serial Number =
Run Start Date =
Run End Date =
Run Operator =
Batch Status = VALID
Method = Novaprime
Date And Time of Export,Batch ID,Sample Name,Well,Sample Type,Status,Interpretive Result,Action*,Curve analysis
,,205920777.1,A01,Unkn-01,,Patient,,
,,neg5,A02,Neg Ctrl-01,,NC,,
,,pos6,A03,Pos Ctrl-01,,PC,,
,,,,,,,,,,
*reporting.
나는 비슷한 것을 시도했습니다 :
awk -F',' -v OFS="," '(NR>1 && $5="Unkn"*){print ...}' A.txt > B.txt
그러나 나는 이 문제를 해결할 수 없었다. 누군가 아이디어를 가질 수 있습니까?
감사해요
답변1
윗분 말씀대로 비교가 필요합니다 ==
. 그러나 ~
연산자를 사용하여 필드를 정규식과 비교하는 것이 바로 그 목적입니다.
pat.awk
:
BEGIN{FS=OFS=","}
$5 ~ /Unkn/{$7="Patient,"}
$5 ~ /Neg/{$7="NC,"}
$5 ~ /Pos/{$7="PC,"}
{print}
$ awk -f pat.awk A.txt
kit
Software Version =
Date And Time of Export =
Experiment Name =
Instrument Software Version =
Instrument Type = CFX
Instrument Serial Number =
Run Start Date =
Run End Date =
Run Operator =
Batch Status = VALID
Method = Novaprime
Date And Time of Export,Batch ID,Sample Name,Well,Sample Type,Status,Interpretive Result,Action*,Curve analysis
,,205920777.1,A01,Unkn-01,,Patient,,
,,neg5,A02,Neg Ctrl-01,,NC,,
,,pos6,A03,Pos Ctrl-01,,PC,,
,,,,,,,,,,
*reporting.
한 줄을 선호하는 경우:
awk -F ',' -v OFS=',' '$5~/Unkn/{$7="Patient,"}$5~/Neg/{$7="NC,"}$5~/Pos/{$7="PC,"}1' A.txt