如何打印第 1 列中唯一值出现的增量计数

jpa*_*mer 8 awk perl

我试图想出一个解决这个问题的方法,我需要递增计数,然后在制表符分隔的文本文件的第 1 列中打印唯一值的计数。下面是一个例子:

Apple_1   1      300
Apple_2   1      500
Apple_2   500    1500
Apple_2   1500   2450
Apple_3   1      1250
Apple_3   1250   2000
Run Code Online (Sandbox Code Playgroud)

所需的输出是:

Apple_1   1      300     1
Apple_2   1      500     1
Apple_2   500    1500    2
Apple_2   1500   2450    3
Apple_3   1      1250    1
Apple_3   1250   2000    2
Run Code Online (Sandbox Code Playgroud)

我知道我可以只打印 NR 就可以在 awk 中打印行号,但我不知道如何为第 1 列的每个唯一值重置它。

感谢您提供的任何帮助,我很感激。

Ste*_*itt 9

Awk 中此类问题的标准技巧是使用关联计数器数组:

awk '{ print $0 "\t" ++count[$1] }'
Run Code Online (Sandbox Code Playgroud)

这计算了每行中第一个单词出现的次数。这不是你所要求的,因为

Apple_1   1      300
Apple_2   1      500
Apple_1   500    1500
Run Code Online (Sandbox Code Playgroud)

会产生

Apple_1   1      300     1
Apple_2   1      500     1
Apple_1   500    1500    2
Run Code Online (Sandbox Code Playgroud)

Apple_1当我们看到 时,计数不会重置Apple_2),但是如果输入已排序,您就可以了。

否则,您需要跟踪计数器和上次看到的密钥:

awk '{ if (word == $1) { counter++ } else { counter = 1; word = $1 }; print $0 "\t" counter }'
Run Code Online (Sandbox Code Playgroud)