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

问题描述:

请将我的文件包含以字符“|”分隔的字段,我想算一个包含字段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

谢谢

+0

你试过了什么? – 2014-10-09 19:39:47

+0

我试过awk -F \ | 'NF> 1 {A [$ 5] ++}; END {for(A中的字段){print field“=”A [field]}}“但对于一个字段是5,但它必须基于1 and 5 – mond14 2014-10-09 19:47:49

+0

发布在您的问题中 – 2014-10-09 19:50:11

使用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 
+0

非常感谢您anubhava – mond14 2014-10-09 20:17:12

+0

不客气,很高兴它解决了。 – anubhava 2014-10-09 20:27:13

+1

啊哈!谢谢你,anubhava,我的生活现在更容易了。很高兴看到awk中没有多维数组的东西是如何完成的(因为gawk 4)。 – joepd 2014-10-09 22:32:46