Ich verwende es, awk
um nur Text zwischen den beiden Zeichenfolgen „Check“ und „Result“ zu lesen. Ich habe viele im Internet gefundene Variationen davon verwendet und kann immer noch nicht das gewünschte Ergebnis erzielen. Ich habe Folgendes versucht:
awk "/Check:/,/Result:/ {print}" BMSCA209-040-transfer-report.18-Jun-2014.11:18.csv.tmp | more
Und ich habe auch versucht:
sed -n "/Check:/,/Result:/p" BMSCA209-040-transfer-report.18-Jun-2014.11:18.csv.tmp | more
Und ich bekomme immer noch nicht, was ich will. Jedes Mal, wenn ich es bekomme, bekomme ich Folgendes:
ata> <data fieldName="Timepoint ID" value="B01 SCREENING"/> <data fieldName="SQCSummary" value=" Nothing Submission Quality and Compliance Report - 201
4-06-03T14:30:00.547-07:00Check: Ensure slice thickness is between 2mm and 5mmResult: FailReason: Image(s) found with slice thickness out of range. Instanc
e 1.2.840.113619.2.55.3.4094358250.93.1395417628.479.369 found with slice thickness out of range : 1.25 Instance 1.2.840.113619.2.55.3.4094358250.93.139541
7628.479.368 found with slice thickness out of range : 1.25 Instance 1.2.840.113619.2.55.3.4094358250.93.1395417628.479.367 found with slice thickness out
of range : 1.25 Instance 1.2.840.113619.2.55.3.4094358250.93.1395417628.479.366 found with slice thickness out of range : 1.25 Instance 1.2.840.113619.2.
55.3.4094358250.93.1395417628.479.365 found with slice thickness out of range : 1.25 Instance 1.2.840.113619.2.55.3.4094358250.93.1395417628.479.364 found
with slice thickness out of range : 1.25 Instance 1.2.840.113619.2.55.3.4094358250.93.1395417628.479.363 found with slice thickness out of range : 1.25 I
nstance 1.2.840.113619.2.55.3.4094358250.93.1395417628.479.362 found with slice thickness out of range : 1.25 Instance 1.2.840.113619.2.55.3.4094358250.93.
1395417628.479.361 found with slice thickness out of range : 1.25 Instance 1.2.840.113619.2.55.3.4094358250.93.1395417628.479.360 found with slice thicknes
Hat jemand noch andere Vorschläge?
Antwort1
Mit perl
:
perl -l -0777 -ne 'print for /Check: (.*?)Result:/gs' < file
Bei GNU grep
wäre das (fast) Äquivalent:
grep -zPo '(?s)Check: \K.*?(?=Result:)' < file
Oder mit pcregrep
:
pcregrep -Mo1 '(?s)Check: (.*?)Result:' < file
Ausgabe:
Ensure Modality is the same for all images in a DICOM series.
Ensure SeriesDate is in the proper DICOM format (YYYYMMDD) for all images.
[...]
Antwort2
Meine Lösung für Ihr Problem:
Verwenden Sie grep
die Zeichenfolgenmanipulation und führen Sie Bashing wie folgt durch:
RES="$(cat BMSCA209-040-transfer-report.18-Jun-2014.11:18.csv.tmp | egrep -o 'Check.*Result')"
RES=${RES%Result}
RES=${RES#Check: }
echo $RES
Das ist es :)
Ergebnis ist:
Ensure slice thickness is between 2mm and 5mm