如何用Bash解析并修改CSV文件:格式化姓名与生成指定邮箱
解决CSV文件的姓名格式化与邮箱生成问题
原始CSV示例
id,location_id,name,title,email,directorate 1,1, Amy lee,Singer,, 2,2,brad Pitt,Actor,,Production 3,5,Steven Spielberg,Producer,spielberg@my.com,Production
需要完成的操作
- 将姓名的每个单词首字母改为大写(例如
Amy Lee、Brad Pitt) - 按规则生成邮箱:名字首字母(小写)+姓氏(小写)+
location_id值+@google.com - 保留原有CSV结构,将结果保存为
file.csv
可行解决方案(使用awk脚本)
直接用awk一次性完成所有处理,避免循环结合sed/awk导致的混乱:
awk 'BEGIN {FS=OFS=","} NR==1 {print; next} { # 处理姓名:去除前后空格后,每个单词首字母大写 name = $3 gsub(/^[[:space:]]+|[[:space:]]+$/, "", name) split(name, parts, /[[:space:]]+/) formatted_name = "" for (i in parts) { part = parts[i] formatted_part = toupper(substr(part,1,1)) tolower(substr(part,2)) formatted_name = formatted_name (formatted_name == "" ? "" : " ") formatted_part } $3 = " " formatted_name # 保留原始姓名字段的前导空格 # 生成目标邮箱格式 first_initial = tolower(substr(parts[1],1,1)) last_name = tolower(parts[2]) $5 = first_initial last_name $2 "@google.com" print }' input.csv > file.csv
脚本说明
BEGIN {FS=OFS=","}:设置输入和输出的分隔符为逗号,确保CSV结构不被破坏NR==1 {print; next}:表头行直接输出,不做任何修改- 姓名处理:先清除姓名字段的前后空格,再分割为名字和姓氏,逐个将单词首字母大写、其余字母小写,最后还原原始的前导空格
- 邮箱生成:提取名字首字母转小写、姓氏全小写,拼接
location_id和域名,替换原email字段 - 最后将处理后的整行输出,重定向到新文件
file.csv
处理后结果
id,location_id,name,title,email,directorate 1,1, Amy Lee,Singer,alee1@google.com, 2,2,Brad Pitt,Actor,bpitt2@google.com,Production 3,5,Steven Spielberg,Producer,sspielberg5@google.com,Production
内容的提问来源于stack exchange,提问作者Art
相关产品推荐
相关产品推荐

