我试图想出一个解决这个问题的方法,我需要递增计数,然后在制表符分隔的文本文件的第 1 列中打印唯一值的计数。下面是一个例子:
Run Code Online (Sandbox Code Playgroud)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
我知道我可以只打印 NR 就可以在 awk 中打印行号,但我不知道如何为第 1 列的每个唯一值重置它。
感谢您提供的任何帮助,我很感激。
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)