使用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
中的当前条目,以确定是否需要添加前缀。