Я работаю с текстовыми файлами ANSI 835 и собираюсь записывать все данные в сегментах, которые начинаются с «BPR» и заканчиваются на «TRN», включая эти маркеры. Данный файл представляет собой одну строку; в пределах этой линии сегмент может, но не всегда, повторяться. Я запускаю процесс по нескольким файлам одновременно, и в идеале я мог бы записать имя файла, в котором сегмент (ы) происходит. Вот то, что я до сих пор, основываясь на answer to another question:Извлечение рисунка, который не обязательно повторяется
#!/bin/sed -nf
/BPR.*TRN/ {
s/.*\(BPR.*TRN\).*/\1/p
d
}
/from/ {
: next
N
/BPR/ {
s/^[^\n]*\(BPR.*TRN\)[^n]*/\1/p
d
}
$! b next
}
Я бегу все файлы, которые я есть через это и записать результаты в файл, который выглядит следующим образом:
BPR*I*393.46*C*ACH*CCP*01*011900445*DA*0000009046*1066033492**01*071923909*DA*72
34692932*20150120~TRN
BPR*I*1611.07*C*ACH*CCP*01*031100209*DA*0000009108*1066033492**01*071923909*DA*7
234692932*20150122~TRN
BPR*I*1415.25*C*CHK************20150108~TRN
BPR*H*0*C*NON************20150113~TRN
BPR*I*127.13*C*CHK************20150114~TRN
BPR*I*22431.28*C*ACH*CCP*01*071000152*DA*99643*1361236610**01*071923909*DA*72346
92932*20150112~TRN
BPR*I*182.62*C*ACH*CCP*01*071000152*DA*99643*1361236610**01*071923909*DA*7234692
932*20150115~TRN
В идеале каждый линия будет префиксом с именем файла, как это:
IDI.Aetna.011415.64539531.rmt:BPR*I*393.46*C*ACH*CCP*01*011900445*DA*0000009046*1066033492**01*071923909*DA*72
34692932*20150120~TRN
IDI.BCBSIL.010915.6434438.rmt:BPR*I*1611.07*C*ACH*CCP*01*031100209*DA*0000009108*1066033492**01*071923909*DA*7
234692932*20150122~TRN
IDI.CIGNA.010215.64058847.rmt:BPR*I*1415.25*C*CHK************20150108~TRN
IDI.GLDRULE.011715.646719.rmt:BPR*H*0*C*NON************20150113~TRN
IDI.MCREIN.011915.6471442.rmt:BPR*I*127.13*C*CHK************20150114~TRN
IDI.UHC.011915.64714417.rmt:BPR*I*22431.28*C*ACH*CCP*01*071000152*DA*99643*1361236610**01*071923909*DA*72346
92932*20150112~TRN
IDI.UHC.011915.64714417.rmt:BPR*I*182.62*C*ACH*CCP*01*071000152*DA*99643*1361236610**01*071923909*DA*7234692
932*20150115~TRN
последние две строки будет приведен пример файла, в котором шаблон сегмент повторяется.
Опять же, добавление каждой строки с именем файла является идеальным. Мне действительно нужно иметь возможность обрабатывать данный однострочный файл, в котором сегмент «BPR ... TRN» повторяется и записывает все сегменты в этом файле в выходной файл.
ли вы показать некоторые входные выборки? В частности, в этом вопросе говорится, что «данный файл является одной строкой», но ваш образец кода подходит для длин, чтобы удалить символы новой строки. Также пример кода ищет строки, содержащие 'from', но в вашем описании не упоминается, почему' from' является важным. Некоторые примеры ввода могут помочь прояснить. – John1024
sed - это 100% неправильный инструмент для этой работы, поэтому бросьте этот сценарий sed, так как большинство используемых им конструкций стали устаревшими в середине 1907-х годов, когда awk был изобретен и начался снова, отправив некоторый ввод проб и ожидаемый результат. –
Можете ли вы использовать COBOL для этого? Я думаю, что этот язык популярен для этой проблемной области. –