Pdftotext - 从文本文件解析数据并导出到mysql或json

问题描述:

我有数百个PDF文件需要解析并插入到MySQL表中。我已经使用-layout选项将PDF文件转换为带有pdftotext的文本。该数据是以下格式的选民信息:Pdftotext - 从文本文件解析数据并导出到mysql或json

 
     1 TES1065268         2 TES1306415          3 AP281900579616 
Elector's Name: DINESH ALAMPELLY    Elector's Name: DHURGA PRASAD E      Elector's Name: KADARI JANGAIAH 

Father's Name: SRINIWASULU     Father's Name: BALAIAH E       Father's Name: RAMAIAH 
       ALAMPALLY 
House No:  ---       House No:  00         House No:  1-1 
Age: 23  Sex: Male      Age: 24  Sex: Male        Age: 71  Sex: Male 
    4 HCJ4116364         5 AP281900579174         6 AP281900582129 
Elector's Name: Kadari Venkataiah    Elector's Name: KADARI RAAM SWAMI     Elector's Name: Kadari Lakshmamma 

Father's Name: Jangaiah      Father's Name: JANGAIAH       Husband's Name: Ramasvami 

House No:  1-1       House No:  1-1        House No:  1-1 
Age: 31  Sex: Male      Age: 40  Sex: Male        Age: 36  Sex: Female 
      .            .             . 
      .            .             . 
      .            .             . 
      .            .             .   

我需要将此数据导出到名为“选民”的mysql表中。还是先将它转换成JSON比较容易,因为已经有冒号分隔的数据了? 我曾尝试使用sed,tr列,但无法达成解决方案。请帮助:)

+1

这可能有所帮助:https://www.google.com/search?q=site:stackoverflow.com+bash+insert+mysql – Cyrus

这可能会为你工作(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 
+0

感谢您的详细解决方案,但一些错误的地方在哪里。我会尽力改进你的解决方案。 – Naveed

+0

请检查我发布的答案,并提出您的意见 – Naveed

这是我想去做:

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

  2. 使用grep(或任何其他命令)匹配Elector's Name:,Father's Name:等字段,并获取相应的值并在新文件中的voterid列旁边的后续列中进行打印。

这样我们就可以得到一个整齐的基于列的数据。但是在文本文件的某些地方,名称值被分成两行。如何去做呢?

有人在这方面给我提供了额外的输入。