awk читать между двумя отдельными строками и отбрасывать остальные

Я использую awk чтобы просто читать текст между двумя строками «Проверить» и «Результат». Я использовал множество вариаций, найденных в Интернете, и до сих пор не может получить благоприятный результат. Я пробовал:

 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 

У кого-нибудь есть другие предложения?

  • UNIX - команда разбивать файл на несколько файлов со всеми строками для каждых 3 уникальных значений в столбце
  • Параллелизация sed дает разную производительность
  • Замена строки во всех файлах, найденных grep. Не могу заставить его работать
  • Многострочная обработка текста: редактирование sshd_config
  • Заменить соответствующие круглые скобки с содержимым
  • Как переместить строку в текстовый файл вверх или вниз на одну строку?
  • Рекурсивно найти все файлы с именем «file.txt» и выполнить команду sed
  • Как использовать SED или AWK для замены заполнителей в файле шаблона с содержимым переменной, содержащим специальные символы?
  • 2 Solutions collect form web for “awk читать между двумя отдельными строками и отбрасывать остальные”

    С 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. [...] 

    Мое решение вашей проблемы:

    Используйте команды 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 
    Interesting Posts
    Linux и Unix - лучшая ОС в мире.