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

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

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