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

使用awk处理CSV文件:为重复邮箱@前添加序号的技术问询

解决方案

要实现给重复邮箱添加序号的需求,你需要分两步处理:先统计每个生成邮箱的出现频率,再根据频率决定是否添加序号。以下是整合了所有需求的awk命令:

awk -v FPAT='([^,]*)|("[^"]+")' -v OFS=',' '
# 第一遍扫描:统计每个标准化邮箱的出现次数
NR == FNR {
    if (NR == 1) next  # 跳过表头
    split($3, name_parts, " ")
    # 生成基础邮箱(用于统计频率)
    email_prefix = tolower(substr(name_parts[1], 1, 1) name_parts[2])
    base_email = email_prefix "@email.com"
    freq[base_email]++
    next
}
# 第二遍扫描:处理输出并添加序号
{
    if (FNR == 1) {
        print  # 直接打印表头
        next
    }
    split($3, name_parts, " ")
    # 1. 处理姓名首字母大写
    formatted_name = toupper(substr(name_parts[1], 1, 1)) substr(name_parts[1], 2) " " \
                     toupper(substr(name_parts[2], 1, 1)) substr(name_parts[2], 2)
    # 2. 生成邮箱前缀和基础邮箱
    email_prefix = tolower(substr(name_parts[1], 1, 1) name_parts[2])
    base_email = email_prefix "@email.com"
    # 3. 给重复邮箱添加序号
    count[base_email]++
    if (freq[base_email] > 1) {
        final_email = email_prefix count[base_email] "@email.com"
    } else {
        final_email = base_email
    }
    # 4. 输出所有字段
    print $1, $2, formatted_name, $4, final_email, $6
}
' file.csv file.csv

关键逻辑说明

  • FPAT配置:确保CSV中带引号的字段(如"Manager, Commanding Officer")被正确识别为单个字段,避免逗号分割错误。
  • 两次扫描文件:
    1. 第一遍扫描仅统计每个标准化邮箱的出现次数,存入freq数组。
    2. 第二遍扫描处理每行数据:
      • 按需求格式化姓名(首字母大写)。
      • 生成基础邮箱,若该邮箱出现多次(freq[base_email] > 1),则在@前添加当前出现的序号(由count数组记录)。
      • 用OFS=','保证输出为标准CSV格式。

输出验证

运行上述命令后,输出将完全匹配你的预期结果:

id,location_id,name,title,email,department
1,10,Sharon Petersen,Administrator,spetersen1@email.com,
2,11,Sharon Petersen,Administrator,spetersen2@email.com,
3,14,Andres Espinoza,"Manager, Commanding Officer",aespinoza@email.com,
4,8,Elizabeth Feeney,CEO,efeeney@email.com,Operations
5,8,Marilyn Baker-Venturini,Director,mbaker-venturini@email.com,

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 08:32:16