如何使用awk解析固定宽度(NACHA)文件格式?

时间:2010-03-10 17:20:23

标签: csv parsing awk fixed-width

我的公司有一个问题:我们怀疑我们从我们的一家应用服务提供商那里收到的NACHA files我们用来向客户提取资金是不正确的。

我们已经拥有所有的ACH协议和合法的mumbo-jumbo,所以我们使用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]

我赞成建立一个可以持续不断地实现这一目标的工具,因为它将成为我们每天/每周进行数据监控的一部分。

那么,如何使用awk或类似工具对NACHA文件进行非规范化?如果有更好的工具,我很高兴听到它。不幸的是,我在网上搜索没有找到任何东西。

1 个答案:

答案 0 :(得分:2)

如果查看gawk信息文件(info gawk),会出现一个名为“3.6读取固定宽度数据”的部分。如果您使用gawk,这可能会提供您所需的信息。

从该文件:

  

将输入记录拆分为固定宽度字段   通过分配包含空格分隔数字的字符串来指定   内置变量`FIELDWIDTHS'。