2014-02-25 71 views
0

请帮助标识第三个字段值等于零的行项目的数量以及其中第三字段值不等于零,逐个字段的行项目的计数字段: 需要如果没有计数,则将“Count!= 0 & Count = 0”填充为“0”。awk计数零和非零字段值:

Input file: f1.txt 
ppp1,abc,10,qqq 
ppp2,abc,5,qqq 
ppp3,abc,0,qqq 
ppp4,abc,18,qqq 
ppp5,abc,0,qqq 
mmm1,xyz,0,rrr 
mmm2,xyz,55,rrr 
nnn1,ijk,12,sss 
nnn2,ijk,89,sss 
nnn3,ijk,62,sss 
bbb1,lmn,0,ttt 
bbb2,lmn,0,ttt 

Output.txt 
abc,count!=0,3 
abc,count=0,2 
xyz,count!=0,1 
xyz,count=0,1 
ijk,count!=0,3 
ijk,count=0,0 
lmn,count!=0,0 
lmn,count=0,2 
+1

这太笼统了。请说明你的尝试和卡住的地方。 – fedorqui

+0

你如何处理awk脚本中的数组? –

+0

从这个命令,我可以得到没有条件的所有计数:awk -F',''{print $ 2}'f1.txt |排序| uniq -c – VNA

回答

2

我打破了CMD的线,使其更易于阅读:

awk -F, -v OFS="," '{c[$2]; 
        if($3!=0)a[$2]++;else b[$2]++} 
        END{for(x in c){ 
         print x,"count!=0",a[x]*1; 
         print x,"count=0",b[x]*1}}' input 
+0

非常感谢肯特,它工作得很好! – VNA

+0

@Kent,为什么回答这种类型的问题,OP只是等待答案而没有任何努力?只是为了声誉?你已经够了。 – BMW

+1

@BMW当我第一次阅读它时,这个问题看起来很简单。但是当我编码时,我发现了一些棘手的部分(例如'c [$ 2]'和'* 1'或者输出的顺序(我没有实现))。在我修复我的代码后,我只是发布了它。 – Kent

0

猫f1.txt | awk -F“,”'if($ 3 == 0){print $ 2 count = 0} if($ 3!= 0)
{print $ 2 count!= 0}}'| uniq -c | awk {print $ 2“,”$ 3“,”$ 1} >> Output.txt