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

如何从邮件转换的TXT文件提取指定字段并生成CSV行

问题需求
  • 处理数千份由Contact Us表单邮件转换而来的TXT文件,提取First Name、Last Name、Long Text三个字段的值
  • 邮件开头行数不固定,字段列用制表符分隔
  • Long Text为多行内容,部分行带管道符|,需要完整提取所有行内容
  • 最终将提取结果按行写入CSV文件

无效尝试回顾

之前的命令无法解决字段名含空格、多行内容捕获的问题:

# 无法正确匹配带空格的字段名,提取结果混乱
awk -F'First Name|Last Name' '{print $2}' 1.txt

# 仅能提取Long Text的第一行内容
awk -F'Long Text' '{print $2}' 1.txt

解决方案:awk多行处理脚本

单文件处理脚本

将以下代码保存为extract_form.awk:

BEGIN {
    FS = "\t"  # 用制表符作为列分隔符
    OFS = ","  # CSV输出用逗号分隔
    in_longtext = 0
    first_name = ""
    last_name = ""
    long_text = ""
}

# 捕获First Name字段
/^\|First Name/ {
    first_name = $2
    gsub(/^[[:space:]]*\|?|[[:space:]]*\|?$/, "", first_name)
    in_longtext = 0
}

# 捕获Last Name字段
/^\|Last Name/ {
    last_name = $2
    gsub(/^[[:space:]]*\|?|[[:space:]]*\|?$/, "", last_name)
    in_longtext = 0
}

# 开始捕获Long Text多行内容
/^\|Long Text/ {
    in_longtext = 1
    part = $2
    gsub(/^[[:space:]]*\|?|[[:space:]]*\|?$/, "", part)
    long_text = part
    next
}

# 持续收集Long Text的后续行
in_longtext == 1 {
    part = $0
    gsub(/^[[:space:]]*\|?|[[:space:]]*\|?$/, "", part)
    long_text = long_text " " part
}

# 遇到新字段行时,输出当前捕获的内容
/^\|[A-Za-z]/ && in_longtext == 0 && first_name != "" {
    # 转义内容中的逗号,避免CSV格式错误
    gsub(/,/, "\\,", first_name)
    gsub(/,/, "\\,", last_name)
    gsub(/,/, "\\,", long_text)
    print first_name, last_name, long_text
    # 重置变量,准备处理下一组记录
    first_name = ""
    last_name = ""
    long_text = ""
}

# 处理文件最后一条记录
END {
    if (first_name != "") {
        gsub(/,/, "\\,", first_name)
        gsub(/,/, "\\,", last_name)
        gsub(/,/, "\\,", long_text)
        print first_name, last_name, long_text
    }
}

批量处理所有TXT文件

在终端执行以下命令,将所有.txt文件的提取结果输出到output.csv:

# 写入CSV表头
echo "First Name,Last Name,Long Text" > output.csv

# 遍历所有txt文件,执行脚本并追加结果
for file in *.txt; do
    awk -f extract_form.awk "$file" >> output.csv
done

关键说明

  • 用制表符\t作为字段分隔符,精准对应原始文件的列结构
  • 通过in_longtext标记位实现多行内容的持续捕获
  • 用gsub清理字段值前后的管道符|和多余空格
  • 自动转义内容中的逗号,避免破坏CSV格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 06:52:01