String bash:按当前发生次数/运行次数更改列字段

String bash:按当前发生次数/运行次数更改列字段,string,bash,duplicates,String,Bash,Duplicates,我被一个相当简单的任务困住了(这更令人沮丧;-): 我有一个这样的专栏: >foo111_bar37 >foo111_bar38 >foo111_bar40 >foo111_bar40 >foo111_bar41 >foo111_bar42 >foo111_bar49 >foo111_bar49 >foo111_bar49 ... 我想修改这个列或者得到一个新的列,它包含同一字符串的当前计数 >foo111_bar37x1 >f

我被一个相当简单的任务困住了(这更令人沮丧;-): 我有一个这样的专栏:

>foo111_bar37
>foo111_bar38
>foo111_bar40
>foo111_bar40
>foo111_bar41
>foo111_bar42
>foo111_bar49
>foo111_bar49
>foo111_bar49
...
我想修改这个列或者得到一个新的列,它包含同一字符串的当前计数

>foo111_bar37x1
>foo111_bar38x1
>foo111_bar40x1
>foo111_bar40x2
>foo111_bar41x1
>foo111_bar42x1
>foo111_bar49x1
>foo111_bar49x2
>foo111_bar49x3
...
目标是使行变得唯一,并且仍然包含原始信息。 我发现了如何使用awk来寻址列,并在一般情况下更改字符串(例如,始终附加“x1”),但没有找到如何使用数字特定的更改来执行此操作。 大多数人似乎想扔掉他们的复制品,或者计算复制品的总数,这对我没有帮助

顺便说一句:我在Windows上使用MobaXterm bash环境


非常感谢

使用awk,您是否有可用的:

$ awk '{a[$1]++;print $1 "x" a[$1]}' file
>foo111_bar37x1
>foo111_bar38x1
>foo111_bar40x1
>foo111_bar40x2
>foo111_bar41x1
>foo111_bar42x1
>foo111_bar49x1
>foo111_bar49x2
>foo111_bar49x3
解释:

$ awk ' {
   a[$1]++             # store to hash a using first field as key. ++ increases
                       # its value by 1 on each iteration for each $1
   print $1 "x" a[$1]  # output $1, "x" and current value of a[$1]
}' file

比詹姆斯·布朗先生的伟大答案短一点(保持概念不变)

awk '{print $0"x"++array[$0]}'  Input_file
说明:因此print关键字将以awk打印行,因此这里我将按$0打印当前行,然后打印字符串x,然后打印名为array的数组,其索引仅为$0,++array[$0]表示首先它将增加该数组索引的值,然后它将打印它


假设(foo111_bar40)出现过一次,所以它将在数组中具有索引,它的值将为1,所以下次数组看到此索引已存在于数组中时,它只需将其增加1,然后将其打印。

完美,非常简单……您能给我一个关于“+”的提示吗?更新的解决方案简要说明。