You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用pdftotext与sed/bash脚本预处理PDF导出的文本文件?

问题

使用pdftotext -layout *.pdf提取PDF文本用于数据挖掘,生成的文本需完成以下预处理:

  • 每行开头为13位GTIN码或5位PLU码,需将码后的单个空格替换为至少两个空格,避免与描述字段的单词间空格混淆,方便后续转制表符;
  • 删除所有单/多行空行,仅保留数据行的换行分隔;
  • 最终生成字段间为单个制表符的TSV文件(描述含逗号,不用CSV)。

已尝试sed/grep/awk/tr等工具,但无法整合满足需求,希望用单一工具(如sed)一次性解决。

示例输入(空格替换为•,换行替换为¶):

9415077026340•Pams•Sour•Cream•&•Chives•Rice•Crackers•100g•••$1.19¶
¶
¶
9415077026296•Pams•BBQ•Chicken•Rice•Crackers•100g•••$1.19¶
¶
61424••••••••••••Yoghurt•Raisins•kg•••$23.90/kg¶
¶
9415077036349•Pams•Sliced•Peaches•In•Juice•410g•••$1.29¶

预期结果(制表符替换为⇥):

9415077026340⇥Pams•Sour•Cream•&•Chives•Rice•Crackers•100g⇥$1.19¶
9415077026296⇥Pams•BBQ•Chicken•Rice•Crackers•100g⇥$1.19¶
61424⇥Yoghurt•Raisins•kg⇥$23.90/kg¶
9415077036349⇥Pams•Sliced•Peaches•In•Juice•410g⇥$1.29¶
解决方案

可以用这条sed命令一次性完成所有需求:

sed -E '/^[[:space:]]*$/d; s/^([0-9]{5}|[0-9]{13}) /\1  /; s/[[:space:]]{2,}/\t/g' input.txt > output.tsv

命令分步解释:

  1. 清除空行:/^[[:space:]]*$/d —— 匹配所有仅含空白字符或完全为空的行,直接删除;
  2. 替换码后单空格为双空格:s/^([0-9]{5}|[0-9]{13}) /\1 / —— 精准匹配行首的5位PLU或13位GTIN码,将其后方的单个空格替换为两个空格,确保和描述内的单词间单空格区分开;
  3. 多空格转制表符:s/[[:space:]]{2,}/\t/g —— 将所有连续两个及以上的空白字符统一替换为单个制表符,完成TSV格式转换。

内容的提问来源于stack exchange,提问作者Fritt Hm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 03:15:43