使用Bash为CSV文件中的重复名称添加位置



使用Bash创建用户登录。如果名称重复,请添加位置。位置应添加到原始名称中,也应添加到重复名称中。

id,location,name,login
1,KP,Lacie,
2,US,Pamella,
3,CY,Korrie,
4,NI,Korrie,
5,BT,Queenie,
6,AW,Donnie,
7,GP,Pamella,
8,KP,Pamella,
9,LC,Pamella,
10,GM,Ericka,

结果应该是这样的:

id,location,name,login
1,KP,Lacie,lacie@mail.com
2,US,Pamella,uspamella@mail.com
3,CY,Korrie,cykorrie@mail.com
4,NI,Korrie,nikorrie@mail.com
5,BT,Queenie,queenie@mail.com
6,AW,Donnie,donnie@mail.com
7,GP,Pamella,gppamella@mail.com
8,KP,Pamella,kppamella@mail.com
9,LC,Pamella,lcpamella@mail.com
10,GM,Ericka,ericka@mail.com

我使用AWK来处理csv文件。

cat data.csv | awk 'BEGIN {FS=OFS=","};
NR > 1 {
split($3, name)
$4 = tolower($3)
split($4, login)
for (k in login) {
!a[login[k]]++ ? sub(login[k], login[k]"@mail.com", $4) : sub(login[k], tolower($2)login[k]"@mail.com", $4)
}
}; 1' > data_new.csv 

该脚本仅将位置值添加到其他重复项中。

id,location,name,login
1,KP,Lacie,lacie@mail.com
2,US,Pamella,pamella@mail.com
3,CY,Korrie,korrie@mail.com
4,NI,Korrie,nikorrie@mail.com
5,BT,Queenie,queenie@mail.com
6,AW,Donnie,donnie@mail.com
7,GP,Pamella,gppamella@mail.com
8,KP,Pamella,kppamella@mail.com
9,LC,Pamella,lcpamella@mail.com
10,GM,Ericka,ericka@mail.com

如何将位置添加到初始位置?

如果您需要知道是否有重复文件,一个常见的解决方案是让Awk处理同一个文件两次。

请注意,此要求避免无用地使用cat

awk 'BEGIN {FS=OFS=","};
NR == FNR { ++seen[$3]; next }
FNR > 1 { $4 = (seen[$3] > 1 ? tolower($2) : "") tolower($3) "@mail.com" }
1' data.csv data.csv >data_new.csv

当您第一次读取文件时,NR==FNR为true。我们简单地计算第二遍seen$3的出现次数

然后在第二遍中,我们可以查看seen中的当前条目,以确定是否需要添加前缀。

相关内容

  • 没有找到相关文章

最新更新