【问题标题】:Pdftotext - parse data from text file and export to mysql or jsonPdftotext - 从文本文件中解析数据并导出到 mysql 或 json
【发布时间】:2018-04-16 22:08:39
【问题描述】:

我有数百个 PDF 文件需要解析并插入到 MySQL 表中。我已经使用 -layout 选项将 pdf 文件转换为带有 pdftotext 的文本。数据为选民信息,格式如下:

1 TES1065268 2 TES1306415 3 AP281900579616 选举人姓名:DINESH ALAMPELLY 选举人姓名:DHURGA PRASAD E 选举人姓名:KADARI JANGAIAH 父亲姓名:SRINIWASULU 父亲姓名:BALAIAH E 父亲姓名:RAMAIAH 阿拉巴利 门牌号:--- 门牌号:00 门牌号:1-1 年龄:23​​ 性别:男 年龄:24 性别:男 年龄:71 性别:男 4 HCJ4116364 5 AP281900579174 6 AP281900582129 选民姓名:Kadari Venkataiah 选民姓名:KADARI RAAM SWAMI 选民姓名:Kadari Lakshmamma 父亲姓名:Jangaiah 父亲姓名:JANGAIAH 丈夫姓名:Ramasvami 房屋编号:1-1 房屋编号:1-1 房屋编号:1-1 年龄:31 性别:男 年龄:40 性别:男 年龄:36 性别:女 . . . . . . . . . . . .

我需要将此数据导出到名为“voters”的 mysql 表中。还是因为已经有冒号分隔的数据,所以首先将其转换为 JSON 是否更容易? 我曾尝试使用 sed、tr 列、折叠但无法找到解决方案。请帮忙:)

【问题讨论】:

标签: sed tr


【解决方案1】:

这可能对你有用(GNU sed):

将文件分成3份,每列一份:

sed -rn -e 's/^(.{46})(.{52})/\1\n\2\n/;h;s/\n.*//w col1' -e 'g;s/.*\n(.*)\n.*/\1/w col2' -e 'g;s/.*\n//w col3' file

将每条记录折叠成逗号分隔的行:

sed -ri.bak 'N;N;N;N;s/^\s*(\S+)\s/\1,/;s/\n/,/g;s/\s*,[^:]*:\s*/,/g;s/\s*Sex:\s*(\S+)\s*/,\1/' col{1,2,3}

使用粘贴以正确的顺序交错记录:

paste -d'\n' col{1,2,3} >csvFile

如果你想要标题使用:

sed 'N;N;N;N;s/Sex:/\n&/;s/\n/,/g;s/^[^,]*/Rowid,Key/;s/:[^,]*//g;q' col1.bak >headers
sed -i.bak '1e cat headers' csvFile

【讨论】:

  • 感谢您提供详细的解决方案,但有些地方出了点问题。我会努力改进您的解决方案。
  • 请检查我发布的答案并提出您的意见
【解决方案2】:

这就是我想要的方式:

  1. 使用 grep(或任何其他命令)选择选民 ID(1 TES1065268,在此应删除数字 1,稍后可以完成)。
    a) 要做到这一点,请在所有具有 voterids 的行中添加关键字“voterid”,然后使用 grep 提取所有这些 id 并将它们打印到另一个文件中的列而不是行中。

  2. 使用 grep(或任何其他命令)匹配选民姓名:、父亲姓名:等字段,并获取相应的值并在新文件中的 voterid 列旁边的后续列中打印。

    李>

这样我们可以得到一个整洁的基于列的数据。但是在文本文件中的某些地方,名称值被分成两行。该怎么办?

请有人在这方面为我提供额外的意见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    相关资源
    最近更新 更多