Ми аналізуємо кілька великих файлів EDI, які не містять CR / LF. Однак вони ~
( тильда ) є розділювачем сегменту.
Я намагаюся витягнути контрольний запис для файлу, а останні байти мого 120 МБ файлу виглядають приблизно так:
~REF*1L*0711882~SE*62300*39093~GE*1*500001242~IEA*1*500001241~
У файлі є лише одна контрольна запис, і вона завжди починається з ~SE
.
Отже, чи є простий спосіб за допомогою стандартних інструментів вирізати Unix , awk , grep та ін., Щоб вирізати цей файл, щоб отримати сегмент SE * 62300 * 39093, окрім конвертації у ~
CRLF та підключення останніх трьох рядків файлу?
Відмова:
Я не гуру Unix, тому відповідь може бути очевидною для досвідченого користувача. Також я не контролюю формат файлу.
tail
. Не потрібно все це розбирати. Щось на зразок tail edi_file | grep ~SE | cut -d'~' -f 3
(де edi_file - назва вашого великого файлу) (Відмова: Приклад працює лише у тому випадку, якщо потрібне поле знаходиться у полі №3 (розмежоване на ~ s як -d ~
. Це може знадобитися коригування. Чи можемо ми отримати більший розмір Приклад вхідного файлу
tail --bytes=5000 ding
... і тоді ви сподіваєтесь, що останніх 5000 байтів вистачить, щоб охопити 3 потрібні рядки.
~
на нові рядки та підключенні останніх 3 рядків файлу. Якщо файл, як відомо, ще не містить нових рядків, то це не вносить неоднозначності у формат, і відверто кажучи, це найкращий спосіб масажувати файл у форматі, який спрощує роботу всіх цих лінійних інструментів.