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列,但无法达成解决方案。请帮助:)
答
这可能会为你工作(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
答
这是我想去做:
使用grep(或任何其它命令)来接选民IDS(1 TES1065268,在这个数字1应该被删除,可以在以后完成)。
a)为此,在所有具有voterids的行中追加关键字“voterid”,然后使用grep提取所有这些id并将它们打印到列中的另一个文件中而不是行中。使用grep(或任何其他命令)匹配Elector's Name:,Father's Name:等字段,并获取相应的值并在新文件中的voterid列旁边的后续列中进行打印。
这样我们就可以得到一个整齐的基于列的数据。但是在文本文件的某些地方,名称值被分成两行。如何去做呢?
有人在这方面给我提供了额外的输入。
这可能有所帮助:https://www.google.com/search?q=site:stackoverflow.com+bash+insert+mysql – Cyrus