如何计算第1列中条目的实例数,并将值打印到新列

use*_*294 5 bash awk

我有一个制表符分隔文件,如下所示:

cluster.1   Adult.1
cluster.2   Comp.1
cluster.3   Adult.2
cluster.3   Pre.3
cluster.4   Pre.1
cluster.4   Juv.2
cluster.4   Comp.4
cluster.4   Adult.3
cluster.5   Adult.2
cluster.6   Pre.5
Run Code Online (Sandbox Code Playgroud)

我想计算第一列中输入的次数,然后将其打印到新的第三列,以便输出看起来像这样.

cluster.1   Adult.1 1
cluster.2   Comp.1  1
cluster.3   Adult.2 2
cluster.3   Pre.3   2
cluster.4   Pre.1   4
cluster.4   Juv.2   4
cluster.4   Comp.4  4
cluster.4   Adult.3 4
cluster.5   Adult.2 1
cluster.6   Pre.5   1
Run Code Online (Sandbox Code Playgroud)

最后,我计划从我的文件中删除那些行,其中第3列等于1但是认为它可能是一个两步过程.谢谢.

per*_*eal 5

使用join:

cut -f1 input | sort | uniq -c | sed 's/^ *\([0-9]*\) */\1\t/' | \
      join -t $'\t'  -1 2 -2 1 -o '2.1 2.2 1.1' - input
Run Code Online (Sandbox Code Playgroud)

输出:

cluster.1   Adult.1 1
cluster.2   Comp.1  1
cluster.3   Adult.2 2
cluster.3   Pre.3   2
cluster.4   Pre.1   4
cluster.4   Juv.2   4
cluster.4   Comp.4  4
cluster.4   Adult.3 4
cluster.5   Adult.2 1
cluster.6   Pre.5   1
Run Code Online (Sandbox Code Playgroud)


fed*_*qui 5

随着awk您可以读取该文件的两倍,如下所示:

$ awk 'NR==FNR {a[$1]++; next} {print $0, a[$1]}' file file
cluster.1   Adult.1 1
cluster.2   Comp.1 1
cluster.3   Adult.2 2
cluster.3   Pre.3 2
cluster.4   Pre.1 4
cluster.4   Juv.2 4
cluster.4   Comp.4 4
cluster.4   Adult.3 4
cluster.5   Adult.2 1
cluster.6   Pre.5 1
Run Code Online (Sandbox Code Playgroud)

第一次由NR==FNR项目声明并计算.第二次是第二次{}打印并打印行加计数器.