计算包含特定字段的相同值的行

时间:2014-10-09 19:39:01

标签: shell awk

请,我有一个文件,其中包含由字符" |"分隔的字段。我想计算字段1和字段5中包含相同值的行

    abc|2|  11|   3| 1000|   0|scql|  29|   |   |   0|   0| plk| stv| 2| 0

    trc|2|  20|   3| 1200|   0|tkgl|   0| pajd|jahd| 0| 0| klm|fdkl|1|0
    mlm|2|  0|   3| 1300|   0|mlpo|  0|   |   |   0|   0| qnhd| pkjs| 2| 0

    klm|2|  0|   3| 1300|   0|mlpo|  0|   |   |   0|   0| qnhd| pkjs| 2| 0

    kkkm|2|  0|   3| 1600|   0|mlpo|  22|   |   |   0|   0| qnhd| pkjs| 2| 0

    ljkkk|9|  0|  5| 1600|   0|mlpo|  22|   |   |   0|   0| qnhd| pkjs| 2| 0

    klm|7|  0|   3| 1300|   0|mjkjlpo|  0|   |   |   6|   0| qnhd| pkjs| 2| 0

    kkkm|2|  0|   7| 1600|   0|mlpo|  22|   |   |   0|   0| qnhd| pkjs| 2| 0

输出应该是这样的:

abc        1000       1

trc        1200       1

mlm        1300       1

klm        1300       2

kkkm       1600       2

ljkkk      1600       1

我尝试了awk -F\| 'NF > 1 {A[$5]++};END{for (field in A){print field"="A[field]}}'但基于一个字段,即5.但它必须基于1和5

谢谢

1 个答案:

答案 0 :(得分:1)

使用awk即可:

awk -F' *\\| *' '{k=$1 OFS $5; b[k]++} END {for (i in b) print i, b[i]}' OFS='\t' file
klm     1300    2
trc     1200    1
abc     1000    1
mlm     1300    1
kkkm    1600    2
ljkkk   1600    1