计算项目在文件中显示的次数,并显示为单独的字段

时间:2013-07-24 18:46:32

标签: unix awk

我有以下格式的文件A:

Item Sample#
AA   LN1
BB   LT1
BA   LN1
BA   LT1
CC   LT1
CA   LT1
CA   LN1

我想要以下输出:

Item Sample# Iteration
AA   LN1     1
BB   LT1     1 
BA   LN1     2 
BA   LT1     2
CC   LT1     1
CA   LT1     2
CA   LN1     2

如果您能为此建议一个简单的unix脚本或awk代码,我将非常感激。

3 个答案:

答案 0 :(得分:1)

这个awk应该可以工作:

 awk 'NR==1 {
   print $0, "Iteration"
 }
 NR > 1 {
    a[$1]++;
    b[cnt++]=$0 SUBSEP $1
 }
 END {
    for (i=0; i<length(b); i++) {
       split(b[i], c, SUBSEP);
       print c[1], a[c[2]]
    }
 }' file

答案 1 :(得分:1)

awk -v OFS="\t" 'NR==1{print $0,"Iteration";next}
{v[NR]=$0;f[NR]=$1;c[$1]++}END{for(x=2;x<=NR;x++)print v[x],c[f[x]]}' file

上述行输出:

Item Sample#    Iteration
AA   LN1        1
BB   LT1        1
BA   LN1        2
BA   LT1        2
CC   LT1        1
CA   LT1        2
CA   LN1        2

答案 2 :(得分:1)

awk '
NR==FNR { if (FNR>1) c[$1]++; next }
{ print $0 "\t" (FNR>1 ? c[$1] : "Iteration") }
' file file