计算字段中的值出现在另一个字段中的次数

时间:2013-02-01 05:27:17

标签: bash shell awk

我最近在计算字段中重复值的次数方面得到了很多帮助,但我的下一步是根据另一个字段中的值计算字段中重复值的次数($ 1) ($ 3)结果在行尾,如下例:

输入文件
    1,2,3
    1,1,1
    3,2,3
    4,1,4
    2,1,3
    5,2,2
    5,1,5
    5,4,6

输出文件

1,2,3,1    
1,1,1,2    
3,2,3,1    
4,1,4,1    
2,1,3,1    
5,2,2,1    
5,1,5,3    
5,4,6,0

如果可能的话,我正在考虑用awk这样做,但是对任何其他建议感到高兴。

1 个答案:

答案 0 :(得分:1)

这是使用awk的一种方式:

awk -F, 'FNR==NR { a[$1]++; next } { print $0, ($3 in a ? a[$3] : "0") }' OFS=, file file

结果:

1,2,3,1
1,1,1,2
3,2,3,1
4,1,4,1
2,1,3,1
5,2,2,1
5,1,5,3
5,4,6,0

说明:

FNR==NR { ... }   # for the first file in the arguments list

a[$1]++           # add column one to an array incrementing it's value.

next              # skip processing the rest of the code

{ ... }           # for every line in the second file in the arguments list

print $0          # print the line

($3 in a ? a[$3] : "0")    # ...followed by the value of the third field in the
                           # array if it is indeed in the array, else print "0".
                           # this is a ternary operator, much like an if/else 
                           # statement