我有一个制表符分隔文件,如下所示:
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但是认为它可能是一个两步过程.谢谢.
使用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)
随着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项目声明并计算.第二次是第二次{}打印并打印行加计数器.