Как использовать awk для анализа формата файла с фиксированной шириной (NACHA)?

У моей компании проблема: мы подозреваем, что Файлы NACHA, которые мы получаем от одного из наших поставщиков услуг приложений, которые мы используем для получения денег от наших клиентов, неверны.

У нас есть все соглашения ACH и юридическая чепуха, так что это не проблема с нашим использованием сети ACH, и мы не получаем известий от банков о том, что что-то идет не так, поэтому мы подозреваем, что, когда файл построен на основе информации о продажах, в нем отсутствуют некоторые транзакции, за которые мы все еще взимаем плату с нашего поставщика услуг.

Моя задача: Взять файлы NACHA за несколько месяцев и расшифровать их, чтобы выяснить, что было получено от каждого клиента и что было депонировано на наши счета, а затем сравнить их с данными о продажах, банковскими выписками и другими данными. информацию через Access/Excel. Используйте MySQL для данных.

На данный момент у меня есть инструмент awk (или аналогичный инструмент командной строки Linux); Я не владею «настоящими» инструментами программирования или практикой, я больше администратор системы и базы данных. Я не боюсь испачкать руки, просто у меня нет большого опыта программирования, чтобы читать подобные вещи, скажем, на C#.

Моя главная трудность заключается в работе с фактическим форматом файла NACHA: он имеет ширину 94 символа, поля определяются только своей позицией, без разделителей. Использование awk (по моему предыдущему опыту) зависит от переменной разделителя полей, которая является либо пробелом, либо чем-то еще... но мне не удалось использовать его для выделения полей через позицию. Мне нужно использовать что-то вроде awk из-за разных типов записей в каждом файле, в файле есть 5 разных типов строк: 1, 5, 6, 8 и 9. Типы 1 и 9 — это внешняя группа с информацией о заголовке. , а 5 и 8 — строки заголовка пакета. Строки типа 6 являются деталями. Мой первоначальный план состоял в том, чтобы прочитать информацию заголовка в переменные, а затем продублировать ее в каждой строке, в основном денормализовав ее в большую таблицу (или CSV, между тем) с одной записью для каждой отдельной транзакции, связанной со всей информацией заголовка из партия и день, поэтому:

 [transaction data1, data2],[batch data1, data2],[file info1, info2, etc] 
 [transaction data1, data2],[batch data1, data2],[file info1, info2, etc]
 [transaction data1, data2],[batch data1, data2],[file info1, info2, etc]

Я выступаю за создание инструмента, который может делать это на постоянной основе в будущем, потому что он станет частью мониторинга данных, который мы делаем ежедневно/еженедельно.

Итак, как я могу денормализировать файл NACHA с помощью awk или другого подобного инструмента? Если есть лучший инструмент для этой работы, я буду более чем рад услышать о нем. Я ничего не нашел в моем поиске в Интернете, к сожалению.


person atroon    schedule 10.03.2010    source источник
comment
Забавно, что ссылка на формат NACHA, которую вы предоставляете, ведет к инструменту, который, судя по всему, можно использовать для нужной вам задачи. Ты это пробовал?   -  person PhiLho    schedule 10.03.2010
comment
Я знаю. И я цитирую: Parse-O-Matic для бизнеса продается как единовременная фиксированная лицензионная плата с компонентом ежегодного продления обслуживания. Одноразовая фиксированная лицензия стоит 1995 долларов США и включает один год обновлений и выпусков обслуживания. Чтобы добраться до $ 1995,00, потребуется много часов.   -  person atroon    schedule 10.03.2010
comment
А, понятно, я видел, что у них есть бесплатная версия, но не то, чтобы она предназначалась только для некоммерческого, некоммерческого использования... :-)   -  person PhiLho    schedule 11.03.2010


Ответы (1)


Если вы посмотрите на информационный файл gawk (info gawk), там есть раздел под названием «3.6 Чтение данных фиксированной ширины». Это может предоставить необходимую информацию, если вы используете gawk.

Из этого файла:

Разбиение входной записи на поля фиксированной ширины определяется путем присвоения строки, содержащей числа, разделенные пробелами, встроенной переменной `FIELDWIDTHS'.

person Dennis Williamson    schedule 10.03.2010
comment
Превосходно! Большое спасибо за указание на это; Я так увлекся (к сожалению, устаревшей) ссылкой на awk, которая у меня была, и просмотром скриптов в Интернете, что никогда не проверял информационную страницу. - person atroon; 10.03.2010