awk zum Lesen zwischen zwei bestimmten Zeichenfolgen und Verwerfen des Rests

awk zum Lesen zwischen zwei bestimmten Zeichenfolgen und Verwerfen des Rests

Ich verwende es, awkum 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 grepwä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 grepdie 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

verwandte Informationen