Total Count using AWK

Hi Everybody,

I have the following example file...

199|TST-GURGAON|GURGAON|1
199|TST-GURGAON|GURGAON|1
199|TST-GURGAON|GURGAON|1
199|TST-GURGAON|GURGAON|1
199|TST-GURGAON|GURGAON|1
199|TST-GURGAON|GURGAON|1
199|TST-GURGAON|GURGAON|1
199|TST-GURGAON|GURGAON|1
199|TST-GURGAON|GURGAON|1
1|TST - MAIN LAB|DELHI|1
1|TST - MAIN LAB|DELHI|1
1|TST - MAIN LAB|DELHI|1
333|TST-PREET VIHAR|DELHI|1
333|TST-PREET VIHAR|DELHI|1
333|TST-PREET VIHAR|DELHI|1
333|TST-PREET VIHAR|DELHI|1
61B|PARNAMI X-RAY & CLINICAL LAB|DELHI|1
650|PUNJABI BAGH|DELHI|1
650|PUNJABI BAGH|DELHI|1
650|PUNJABI BAGH|DELHI|1
871|GREATER NOIDA C.C|GREATER NOIDA|1
871|GREATER NOIDA C.C|GREATER NOIDA|1
871|GREATER NOIDA C.C|GREATER NOIDA|1
871|GREATER NOIDA C.C|GREATER NOIDA|1
871|GREATER NOIDA C.C|GREATER NOIDA|1
871|GREATER NOIDA C.C|GREATER NOIDA|1
871|GREATER NOIDA C.C|GREATER NOIDA|1
871|GREATER NOIDA C.C|GREATER NOIDA|1
897|NETAJI NAGAR C.C|DELHI|1
VK1|NATIONAL DIAGNOSTICS|PATNA|1
VK1|NATIONAL DIAGNOSTICS|PATNA|1
VK1|NATIONAL DIAGNOSTICS|PATNA|1
VK1|NATIONAL DIAGNOSTICS|PATNA|1
VK1|NATIONAL DIAGNOSTICS|PATNA|1
VK1|NATIONAL DIAGNOSTICS|PATNA|1
VK1|NATIONAL DIAGNOSTICS|PATNA|1
VK1|NATIONAL DIAGNOSTICS|PATNA|1

I am looking for a AWK or PERL solution (A single line code is highly prefered) to produce the following...

199|TST-GURGAON|GURGAON|9
1|TST - MAIN LAB|DELHI|3
333|TST-PREET VIHAR|DELHI|4
61B|PARNAMI X-RAY & CLINICAL LAB|DELHI|1
650|PUNJABI BAGH|DELHI|3
871|GREATER NOIDA C.C|GREATER NOIDA|8
897|NETAJI NAGAR C.C|DELHI|1
VK1|NATIONAL DIAGNOSTICS|PATNA|8

Basically the I am looking to print the total count based on the first field.

Could any body from you may give me a hand please ?

Regards - Sraj142

$ nawk -F"\|" ' { arr[$1]++ } END { for( no in arr) { print no , arr[no] } } ' test
199 9
VK1 8
871 8
61B 1
650 3
897 1
333 4
1 3

taken from the old post..

search here for more answers
Google Search Results for count file awk | The UNIX and Linux Forums

1 Like

Hi itkamaraj,

Big Thanks for your reply. One thing is happening here...

  • Field 2 and 3 are not being displayed.

Any hint please ?

Regards.

like this.. ?

its ur responsibility to remove the first pipe symbol and adding the pipe symbol in last before field. modify the code

 
$ nawk -F"\|" ' { for(i=1;i<NF;i++)str=str"|"$i; arr[str]++; str="" } END { for( no in arr) { print no , arr[no] } } ' test                        
|650|PUNJABI BAGH|DELHI 3
|333|TST-PREET VIHAR|DELHI 4
|199|TST-GURGAON|GURGAON 9
|VK1|NATIONAL DIAGNOSTICS|PATNA 8
|61B|PARNAMI X-RAY & CLINICAL LAB|DELHI 1
|871|GREATER NOIDA C.C|GREATER NOIDA 8
|1|TST - MAIN LAB|DELHI 3
|897|NETAJI NAGAR C.C|DELHI 1
 

Yea, Sure. Its a good start. Thanks a lot. In any case, is it not possible with the same code you have posted ?

its possible with the above same code.. need some changes... try it out and let us know

1 Like

Struggling, but no hope yet "itkamaraj'. Please see if you can give me hand.

---------- Post updated at 01:03 PM ---------- Previous update was at 12:43 PM ----------

Hi itkamaraj,

Big many thanks for giving me a good start. I have got with the following code...

nawk -F"\|" ' { for(i=1;i<NF;i++)str=str"|"$i; arr[str]++; str="" } END { for( no in arr) { print no,"|", arr[no] } } ' upload.dat | 
  awk 'BEGIN {FS="|"} {sep="|"} {print $2 sep $3 sep $4 sep $5}' | sed '1,$s/ | /|/g'
 

Regards.

 
 nawk -F"\|" ' { for(i=1;i<NF;i++){if(i==1){str=$i} else{str=str"|"$i}} arr[str]++; str="" } END { for( no in arr) { print no"|"arr[no] } } ' upload.dat
awk 'BEGIN{FS=OFS="|"}END{p($0,z)}function p(y,z){print y z}{$NF=_;if(NR-1 && P!=$0){p(P,z);z=0};P=$0;z++}'  file
199|TST-GURGAON|GURGAON|9
1|TST - MAIN LAB|DELHI|3
333|TST-PREET VIHAR|DELHI|4
61B|PARNAMI X-RAY & CLINICAL LAB|DELHI|1
650|PUNJABI BAGH|DELHI|3
871|GREATER NOIDA C.C|GREATER NOIDA|8
897|NETAJI NAGAR C.C|DELHI|1
VK1|NATIONAL DIAGNOSTICS|PATNA|8
1 Like