【问题标题】:How to parse date from bank statement PDF如何从银行对帐单PDF中解析日期
【发布时间】:2014-05-24 20:24:47
【问题描述】:

我正在寻找一种从我下载的各种报表 PDF 中提取报表日期的方法。

使用 mdimport -d2(在 Mac 上)我可以获得文件的 Spotlight 索引元数据,其中包括一个名为 kMDItemTextContent 的字段,其中包含 PDF 的所有文本。

现在我需要创建一组规则来从该文本中提取语句日期,该日期因文件而异,并将其转换为标准的yyyy-mm-dd 格式。

我不确定是否应该使用sedgrepawk ...以及使用什么参数。

以下是文本的相关部分和期望结果的一些示例:

Jan. 23, 2014 31 Days in Billing Cycle -> 2014-01-23

Service period 02/03 - 03/02 -> 2014-03-02

Statement Date: February 3, 2014 -> 2014-02-03

Statement Closing Date 04/04/2014 -> 2014-04-04

Statement Period Jan 6 - Feb 5, 2014 -> 2014-02-05

【问题讨论】:

  • 鉴于数据格式千差万别,您最好单独匹配每个格式,而不是尝试制作一个 frankenregex 来尝试捕获所有格式。
  • 是的,我想我需要为每个人制定一个单独的“规则”。我愿意这样做,但我应该使用哪个命令?只是在寻找一个起点。
  • sed/awk 可能。 grep 可以匹配文件,但它用于提取文本行,而不是“行块”。不确定 awk 和 sed 的日期生成/格式化功能是什么,但最后它们可以提取相关值,以便您可以将其提供给 date 之类的东西进行格式化。
  • 你能给我举一个 sed/awk 的例子吗?至少要取出日期部分?

标签: parsing sed awk grep


【解决方案1】:

这是第一个模式的 awk 解决方案;您可以将其用作其余部分的基础:

> echo "Jan. 23, 2014 31 Days in Billing Cycle" |
  awk 'BEGIN { split("Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec",
                     months, "|") }
       /Days in Billing Cycle/ { printf("%d-%02d-%d\n", $3,
                                        months[substr($1,1,3)]+1,
                                        substr($2, 1, length($2)-1)) }'
2014-01-23

我假设文本“2014 年 1 月 23 日,计费周期中的 31 天”单独出现在一行中(因此,在两个换行符之间)。

【讨论】:

  • 实际上文本不在一行中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-14
  • 2013-09-02
  • 2013-05-25
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多