使用计数器awk重新编号重复行

使用计数器awk重新编号重复行,awk,sed,Awk,Sed,我在csv中有重复的单词。我需要这样计算: jsmith jsmith kgonzales shouston dgenesy kgonzales jsmith 为此: jsmith@email.com jsmith1@email.com kgonzales@email.com shouston@email.com dgenesy@email.com kgonzales1@email.com jsmith2@email.com 我有这样的smth,但它对我来说不能正常工作..或者我不能这样做一

我在csv中有重复的单词。我需要这样计算:

jsmith
jsmith
kgonzales
shouston
dgenesy
kgonzales
jsmith
为此:

jsmith@email.com
jsmith1@email.com
kgonzales@email.com
shouston@email.com
dgenesy@email.com
kgonzales1@email.com
jsmith2@email.com

我有这样的smth,但它对我来说不能正常工作..或者我不能这样做

一个简单的方法是使用用户名作为索引维护一个数组,并在每次读取用户时递增它,例如

awk '{ print (($1 in a) ? $1 a[$1] : $1) "@email.com"; a[$1]++ }' file
三元一美元$1A[$1]:$1只需检查[]中的用户是否仍在,如果是,则使用名称加上数组$1A[$1]的值。如果用户不在数组中,则只使用用户$1。三元分析的结果与@email.com连接以完成输出

最后,用户的数组元素的值是递增的,[$1]++

示例使用/输出

在名为“用户”的文件中输入您的姓名,您将拥有:

$ awk '{ print (($1 in a) ? $1 a[$1] : $1) "@email.com"; a[$1]++ }' users
jsmith@email.com
jsmith1@email.com
kgonzales@email.com
shouston@email.com
dgenesy@email.com
kgonzales1@email.com
jsmith2@email.com
将电子邮件保存在输入文件中的步骤

如果您输入的用户名末尾已经包含电子邮件,那么您只需输出该记录并跳到下一条记录,例如

awk '$1~/@/{print; next} { print (($1 in a) ? $1 a[$1] : $1) "@email.com"; a[$1]++ }' users
这将保护e。meeks@example.or根据你的评论

示例输入

示例输出


一个简单的方法是使用用户名作为索引维护一个数组,并在每次读取用户时递增它,例如

awk '{ print (($1 in a) ? $1 a[$1] : $1) "@email.com"; a[$1]++ }' file
三元一美元$1A[$1]:$1只需检查[]中的用户是否仍在,如果是,则使用名称加上数组$1A[$1]的值。如果用户不在数组中,则只使用用户$1。三元分析的结果与@email.com连接以完成输出

最后,用户的数组元素的值是递增的,[$1]++

示例使用/输出

在名为“用户”的文件中输入您的姓名,您将拥有:

$ awk '{ print (($1 in a) ? $1 a[$1] : $1) "@email.com"; a[$1]++ }' users
jsmith@email.com
jsmith1@email.com
kgonzales@email.com
shouston@email.com
dgenesy@email.com
kgonzales1@email.com
jsmith2@email.com
将电子邮件保存在输入文件中的步骤

如果您输入的用户名末尾已经包含电子邮件,那么您只需输出该记录并跳到下一条记录,例如

awk '$1~/@/{print; next} { print (($1 in a) ? $1 a[$1] : $1) "@email.com"; a[$1]++ }' users
这将保护e。meeks@example.or根据你的评论

示例输入

示例输出


请您尝试以下,书面和测试显示的样品

awk '{print $0 (arr[$0]++)"@email.com"}' Input_file

简单的解释是打印当前行$0以及一个名为arr的数组,该数组的当前行索引在每次光标到达这里时递增计数为1,然后打印@email.com,使输出与OP中显示的输出相似。

请尝试以下内容,并使用显示的示例编写和测试

awk '{print $0 (arr[$0]++)"@email.com"}' Input_file

简单的解释是,打印当前行$0以及一个名为arr的数组,该数组的当前行索引每次光标到达这里时递增计数为1,然后打印@email.com,这会使输出看起来与OP中显示的输出相似。

如果我的列中已经包含类似于此的行,该怎么办。meeks@example.org? 它去e。meeks@example.org@email.com抱歉,我忘了提及,比如$0!~/@/&&。。。哦,这是一个你的输入实际上不同于你在问题中发布的内容的问题?您想删除@example.org并更改为@email.com,还是想保留@example.org?@Estet最好的开始位置是。慢慢来。在awk里你写规则。每个{…}都是一条规则。awk将按照您编写规则的顺序将规则应用于输入的每个记录行。Awk中的数组是关联的。这意味着您可以使用字符串作为索引。在这个答案中,我们只使用一个数组,其中包含来自列的索引,例如a[jsmith]。每次我们看到jsmith,我们都会将[jsmith]的值增加1,这样我们就知道他被看到了多少次。Awk非常棒。@Estet如果您的输入中有电子邮件地址,请编辑您的问题以在输入/输出中显示电子邮件地址。特别是,请至少包括一个电子邮件地址在您的输入中重复的情况,以便我们可以查看您是否也希望在输出中重复该电子邮件地址。还包括一个案例,其中您的输入中有一个名称以及该名称的电子邮件地址,例如jsmith和jsmith@email.com,以显示您是否愿意jsmith@email.com然后在输出或其他内容中出现两次。meeks@example.org? 它去e。meeks@example.org@email.com抱歉,我忘了提及,比如$0!~/@/&&。。。哦,这是一个你的输入实际上不同于你在问题中发布的内容的问题?您想删除@example.org并更改为@email.com,还是想保留@example.org?@Estet最好的开始位置是。慢慢来。在awk里你写规则。每个{…}都是一条规则。awk将按照您编写规则的顺序将规则应用于输入的每个记录行。Awk中的数组是关联的。这意味着您可以使用字符串作为索引。在这个答案中,我们只使用一个数组,其中包含来自列的索引,例如a[jsmith]。每次我们看到jsmith,我们都会将[jsmith]的值增加1,这样我们就知道他被看到了多少次。Awk非常棒。@Estet如果您的输入中有电子邮件地址,请编辑您的问题以在输入/输出中显示电子邮件地址。尤其要包括至少一个电子邮件地址在您的i/O中重复的情况 nput,以便我们可以查看您是否也希望在输出中复制。还包括一个案例,其中您的输入中有一个名称以及该名称的电子邮件地址,例如jsmith和jsmith@email.com,以显示您是否愿意jsmith@email.com然后在输出或其他内容中出现两次。请将您的问题显示为您自己解决问题的尝试,以避免因缺少该问题而被否决。不要发布链接或图片。请查看您的问题,以显示您自己解决问题的尝试,以避免因遗漏问题而被否决。不要发布链接或图片。看见