Count the number or row with same value in a column


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Count the number or row with same value in a column
# 1  
Old 12-14-2010
Count the number or row with same value in a column

This is the source file, we called it errorlist.out
Code:
196    server_a    server_unix_2    CD
196    server_b    server_win_1    CD
196    server_c    server_win_2    CD
196    server_bd    server_unix_2    CD
196    server_d    server_unix_2    CD
196    server_es    server_win_1    CD
196    server_f    server_unix_2    CD
196    server_gs    server_win_2    CD
196    server_h    server_win_2    CD
196    server_1    server_unix_3    CD
196    server_ae    server_unix_2    CD
196    server_ca    server_unix_3    CD
196    server_az    server_win_2    CD
196    server_aw    server_win_1    CD
196    server_t    server_win_2    CD
196    server_uv    server_unix_2    CD
196    server_r    server_win_2    CD
196    server_rt    server_win_1    CD
196    server_ut    server_win_2    CD
196    server_zx    server_unix_3    CD
25    server_re    server_unix_3    CD
13    server_vc    server_unix_3    CD
58    server_ze    server_unix_3    CD
58    server_ae    server_unix_2    CD
57    server_ca    server_unix_3    CD
6    server_az    server_win_2    CD
6    server_aw    server_win_1    CD

I want to achive something like this:

If code 196 more than 10, i want sent email with all those information to my email.
For other code, separate email will be sent.

Im thinking might be can use awk,but all syntax i'll use have an error. Anyone can point me the right syntax to get this done?
# 2  
Old 12-14-2010
Code:
cat inputfile | cut -f1 | uniq | while read line
do
count=`grep "$line" inputfile | wc -l`
if [ $count -gt 10 ] ; then
    mail -s "subject:more than 10" abc@abc.com
else
    mail -s "subject:less than 10" abc@abc.com
fi

This User Gave Thanks to For This Post:
R0H0N
# 3  
Old 12-14-2010
@R0H0N: calling uniq will squeeze together similar lines, thus reducing the reported vs. real number of lines matching. Also, UUOC

Simpler:
Code:
errors=$( awk '$1 == 196{total++} END{print total}' error_file )
if [ $errors -gt ]
then
     # use prefered mail sending tool here
fi

This User Gave Thanks to pludi For This Post:
# 4  
Old 12-14-2010
Quote:
Originally Posted by pludi
@R0H0N: calling uniq will squeeze together similar lines, thus reducing the reported vs. real number of lines matching.
My solution is not only for 196. It will send mail for all error numbers which are having more than 10 entries in file.
R0H0N
# 5  
Old 12-14-2010
Code:
awk '{a[$1]++}
END{for (i in a) {if (a[i]>10) {c=(c=="")?i:c FS i}
                        else {b=(b=="")?i:b FS i}
                 }
       print "code than 10:", c |"mailx your@mail.com";
       print "code not than 10:", b|"mailx other@mail.com";
}' infile


Last edited by rdcwayx; 12-14-2010 at 06:19 AM..
This User Gave Thanks to rdcwayx For This Post:
# 6  
Old 12-14-2010
Quote:
Originally Posted by R0H0N
My solution is not only for 196. It will send mail for all error numbers which are having more than 10 entries in file.
Yes, but the request was for error code 196 explicitly.
# 7  
Old 12-15-2010
Quote:
Originally Posted by R0H0N
Code:
cat inputfile | cut -f1 | uniq | while read line
do
count=`grep "$line" inputfile | wc -l`
if [ $count -gt 10 ] ; then
    mail -s "subject:more than 10" abc@abc.com
else
    mail -s "subject:less than 10" abc@abc.com
fi

Hi R0H0N,

Thanks for the reply, i tried to use your solution here but i think something is missing. On every condition i test, all email is use subject less than 10. Means that it pass the first conditions, i tried to put greater then 10,20,30,40 with same input file but same email coming into my email.

Furthermore, the email contains all lines and i need only line started with 196. What modification can be made on your code here?
Thanks

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

Quote:
Originally Posted by pludi
@R0H0N: calling uniq will squeeze together similar lines, thus reducing the reported vs. real number of lines matching. Also, UUOC

Simpler:
Code:
errors=$( awk '$1 == 196{total++} END{print total}' error_file )
if [ $errors -gt ]
then
     # use prefered mail sending tool here
fi

Hi Pludi,

I also tested your method, how ever it only printed the total amount of line with 196, ie:19 in this case. Anyway to make it more complete?

Thanks

---------- Post updated at 12:04 PM ---------- Previous update was at 12:03 PM ----------

Quote:
Originally Posted by rdcwayx
Code:
awk '{a[$1]++}
END{for (i in a) {if (a[i]>10) {c=(c=="")?i:c FS i}
                        else {b=(b=="")?i:b FS i}
                 }
       print "code than 10:", c |"mailx your@mail.com";
       print "code not than 10:", b|"mailx other@mail.com";
}' infile

Hi rdcwayx,

Thanks for the reply, however when i run this script it it prompt for syntax error on line 2,3.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Reseting row count every given number of rows

I have a file with 48 rows. I am counting 6 rows and adding 6 to that number and repeating the operation, and then output the value in column 1. For the second column, I would like to get sort of a binary output (1s and 2s) every 3rd row. This is what I have: awk '{print ++src +... (1 Reply)
Discussion started by: Xterra
1 Replies

2. UNIX for Beginners Questions & Answers

Copy columns from one file into another and get sum of column values and row count

I have a file abc.csv, from which I need column 24(PurchaseOrder_TotalCost) to get the sum_of_amounts with date and row count into another file say output.csv abc.csv- UTF-8,,,,,,,,,,,,,,,,,,,,,,,,, ... (6 Replies)
Discussion started by: Tahir_M
6 Replies

3. UNIX for Dummies Questions & Answers

I want count of number of records to be printed on each row.

we want the count of number of records to be printed on each row. For Ex: if there are 5 records on one unique id , the count "5'' should be printed on each record in other column. Please help for this. I am using unix & Cygwin. Below are sample records: KCZ0650473... (2 Replies)
Discussion started by: ElijaRajesh
2 Replies

4. Shell Programming and Scripting

how to add the number of row and count number of rows

Hi experts a have a very large file and I need to add two columns: the first one numbering the incidence of records and the another with the total count The input file: 21 2341 A 21 2341 A 21 2341 A 21 2341 C 21 2341 C 21 2341 C 21 2341 C 21 4567 A 21 4567 A 21 4567 C ... (6 Replies)
Discussion started by: juelillo
6 Replies

5. Linux

Serial terminal emulation - bad row column count ?

Hello, I connect to linux using serial cable from windows machine. I use putty as serial terminal emulator. Everything works fine except programs which scroll text - man, more, less, vi, etc.. These programs asumme my terminal size is 80cols x 24rows (my putty window size is more than that,... (1 Reply)
Discussion started by: vilius
1 Replies

6. UNIX for Dummies Questions & Answers

Adding a column with the row number using awk

Is there anyway to use awk to add a first column to my data that automatically goes from 1 to n , where n is the numbers of my rows?:confused: (4 Replies)
Discussion started by: cosmologist
4 Replies

7. UNIX for Dummies Questions & Answers

deleting a row if a certain column is below a certain number

How can you delete a row if a certain column is bigger than a certain number? I have the following input: 20080709 20081222 95750 1 0 0.02 94.88 20080709 20081222 95750 2 0 0.89 94.88 20080709 20081222 9575 1 0 0 94.88 20080709 20081222 9575 2 0 0 94.88 20080709 20081222 9587.5 1 0 0... (6 Replies)
Discussion started by: Pep Puigvert
6 Replies

8. UNIX for Dummies Questions & Answers

deleting a row if a certain column is below a certain number

How can you delete a row if a certain column is bigger than a certain number? I have the following input: 20080709 20081222 95750 1 0 0.02 94.88 20080709 20081222 95750 2 0 0.89 94.88 20080709 20081222 9575 1 0 0 94.88 20080709 20081222 9575 2 0 0 94.88 20080709 20081222 9587.5 1 0 0... (1 Reply)
Discussion started by: Pep Puigvert
1 Replies

9. Shell Programming and Scripting

count number of nonempty columns in row

Hi, Suppose i have a inputfile in csv format. How to use awk to count 'the number of nonempty columns in each row' minus one, and add the value as a new column in the end For cosmetic reason, it's even better to include a descriptive label for the last column in the first row. for... (2 Replies)
Discussion started by: grossgermany
2 Replies

10. UNIX for Dummies Questions & Answers

row count but only number part

hi i am pretty new to unix .i am ETL guy I need a unix script to take row count of a file and write it to another file the problem with wc-l is it include filename also wc -l abc.dat will give me like 1000 abc.dat i just want 1000 to be written can u just take 2 min to write a simple... (1 Reply)
Discussion started by: er_zeeshan05
1 Replies
Login or Register to Ask a Question