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 

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

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 
  • Backreference в регулярном выражении Awk
  • Добавление строки текста в несколько файлов
  • Извлечь линии, содержащие шаблон
  • Как предупредить sed -i от уничтожения символических ссылок?
  • список файлов в каталоге без перечисления в текущем каталоге
  • Объяснение sed в сценарии оболочки
  • Используйте sed для поиска и сохранения только строк с двумя альфа-символами в них
  • Использовать sed или awk для объединения строк в определенном шаблоне?
  • Как добавить текущую дату перед расширением файла для нескольких файлов в каталоге?
  • Есть ли разница между read, head -1 и sed 1q?
  • Выделите n-й столбец вывода ps
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.