두 개의 특정 문자열 사이를 읽고 나머지는 삭제하는 awk

두 개의 특정 문자열 사이를 읽고 나머지는 삭제하는 awk

저는 awk"Check"와 "Result"라는 두 문자열 사이의 텍스트를 읽는 데 사용하고 있습니다. 나는 인터넷에서 찾은 다양한 변형을 사용해 보았지만 여전히 선호하는 결과를 얻을 수 없습니다. 난 노력 했어:

awk "/Check:/,/Result:/ {print}"  BMSCA209-040-transfer-report.18-Jun-2014.11:18.csv.tmp | more

그리고 나는 또한 다음을 시도했습니다.

sed -n "/Check:/,/Result:/p" BMSCA209-040-transfer-report.18-Jun-2014.11:18.csv.tmp | more

그리고 아직도 내가 원하는 것을 얻지 못하고 있습니다. 받을 때마다 다음과 같은 내용을 받습니다.

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

누구든지 다른 제안이 있습니까?

답변1

와 함께 perl:

perl -l -0777 -ne 'print for /Check: (.*?)Result:/gs' < file

GNU를 사용하면 grep(거의) 동등한 것은 다음과 같습니다:

grep -zPo '(?s)Check: \K.*?(?=Result:)' < file

또는 다음을 사용하여 pcregrep:

pcregrep -Mo1 '(?s)Check: (.*?)Result:' < file

산출:

Ensure Modality is the same for all images in a DICOM series.
Ensure SeriesDate is in the proper DICOM format (YYYYMMDD) for all images.
[...]

답변2

귀하의 문제에 대한 나의 해결책:

grep다음과 같이 문자열 조작을 사용 하고 bash하십시오.

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

그게 다야 :)

결과는 다음과 같습니다

Ensure slice thickness is between 2mm and 5mm

관련 정보