【问题标题】:How do I use awk to parse a fixed-width (NACHA) file format?如何使用 awk 解析固定宽度 (NACHA) 文件格式?
【发布时间】:2011-01-26 00:21:33
【问题描述】:

我的公司有一个问题:我们怀疑我们从我们的一个应用程序服务提供商那里收到的 NACHA files 是不正确的。

我们有所有的 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]

我赞成构建一个可以在未来持续执行此操作的工具,因为它将成为我们每天/每周进行的数据监控的一部分。

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

【问题讨论】:

  • 有趣的是,您提供的 NACHA 格式链接是一个工具,显然,该工具可用于您需要完成的任务。你试过了吗?
  • 我知道。我引用: Parse-O-Matic for Business 以一次性固定许可费的形式出售,并包含年度服务更新部分。一次性平面许可证的价格为 1,995.00 美元,包括一年的升级和维护版本。达到 1995.00 美元需要很多小时。
  • 啊,我明白了,我看到他们有免费版,但不是非商业、非盈利用途...... :-)

标签: csv parsing awk fixed-width


【解决方案1】:

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

从那个文件:

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

【讨论】:

  • 太棒了!非常感谢您指出这一点;我已经完全沉浸在我拥有的(不幸的是过时的)awk 参考资料中,并且在网上查看脚本,以至于我从未检查过信息页面。
猜你喜欢
  • 1970-01-01
  • 2011-06-22
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多