Awk to count occurences


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Awk to count occurences
# 1  
Old 12-26-2010
Awk to count occurences

Hi,

i am in need of an awk script to accomplish the following:

Input table looks like:

Student1 arts
Student2 science
Student3 arts
Student4 science
Student5 science
Student6 science
Student7 science
Student8 science
Student9 science
Student10 science
Student11 science
Student12 arts
Student13 arts
Student14 arts
Student15 arts
Student16 science
Student17 science
Student18 science
Student19 science
Student20 science

Problem:

I want to count how many 'science' occurs continuously and how many 'arts' occurs continuously and how many times each occur continuously without a break in this table.

Expected Result:

'science' occurs twice continuously with 8 and 5 counts respectively and 'arts' occurs once continuously with 4 counts.


I greatly appreciate your help.
Thanks.
# 2  
Old 12-26-2010
Try:
Code:
awk '
$2==p{c++;next}
p && c>1{ print p, c}
{p=$2;c=1}
END{if(c>1)print p, c}' file


Last edited by Franklin52; 12-26-2010 at 06:00 PM..
This User Gave Thanks to Franklin52 For This Post:
# 3  
Old 12-27-2010
Thank you so much. This code really helps!
# 4  
Old 12-27-2010
Not to cause trouble :-) but while the example code works for the example file, it has four errors -- nothing is printed if $2 is "0", if the line is unique, or the last line is unique; nor is the number of sequences displayed. May I suggest:
Code:
$2 == p { c++; next; }
p != "" && c { print p, c; }
{ p = $2 ; c = 1; n[p]++; }
END {
  if (p != "") print p, c;
  print "==============";
  for (p in n) print p, n[p];
}


Last edited by Scott; 12-27-2010 at 04:20 PM.. Reason: Please use code tags
This User Gave Thanks to m.d.ludwig For This Post:
# 5  
Old 12-27-2010
try perl below

Code:
while(<DATA>){
  my @tmp = split;
  if($.==1){
   $pre=$tmp[1];
   $cnt=1;
   next;
  }
  else{
   if($tmp[1] eq $pre){
     $cnt++;
   }
   else{
    $hash{$pre}->{$cnt}=1;
    $cnt=1;
    $pre=$tmp[1];
  }
 }
}
$hash{$pre}->{$cnt}=1;
foreach my $key (keys %hash){
  my %tmp = %{$hash{$key}};
  foreach my $k (keys %tmp){
   print $key,":", $k,"\n" if $k>1;
  }
}
__DATA__
Student1 arts
Student2 science
Student3 arts
Student4 science
Student5 science
Student6 science
Student7 science
Student8 science
Student9 science
Student10 science
Student11 science
Student12 arts
Student13 arts
Student14 arts
Student15 arts
Student16 science
Student17 science
Student18 science
Student19 science
Student20 science

This User Gave Thanks to summer_cherry For This Post:
# 6  
Old 12-28-2010
Again, not to cause trouble :-) as TMTOWTDI, but while your code (post #5) works for the example file, it also has two errors -- nothing is printed if the line is unique or the last line is unique. May I suggest:
Code:
use strict;
use warnings;

$\ = "\n";
$, = ':';

my $p = '';
my $n = 0;
my %N = ();

while (<>) {
    chomp;
    my ($s, $c) = split;

    if ($c ne $p) {
        print $p, $n if 0 < $n;

        $N{$c}++;
        $p = $c;
        $n = 0;
    }

    $n++;
}

print $p, $n if 0 < $n;
print '=' x 10;
while (my ($c, $n) = each %N) { print $c, $n; }

This User Gave Thanks to m.d.ludwig For This Post:
# 7  
Old 12-28-2010
A simple invocation of uniq may be sufficient for your need:
Code:
uniq -f1 -c

These 3 Users Gave Thanks to binlib For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Count occurences of the word without it repeating

Hi, I would like to count the number of ALA occurences without having them to be repeated. In the script I have written now it has 40 repetitions of ALA but it has to be 8. ALA is chosen as one of the 20 values it can have when the script asks for the input of AAA, which for this example is chosen... (7 Replies)
Discussion started by: Aurimas
7 Replies

2. Shell Programming and Scripting

Count the occurences of strings

I have some text files in a folder f1 with 10 columns. The first five columns of a file are shown below. aab abb 263-455 263 455 aab abb 263-455 263 455 aab abb 263-455 263 455 bbb abb 26-455 26 455 bbb abb 26-455 26 455 bbb aka 264-266 264 266 bga bga 230-232 230 ... (10 Replies)
Discussion started by: gomez
10 Replies

3. Shell Programming and Scripting

[solved]awk count occurences in time window

Input File Time, KeyStation 00:00:00,000;KS_1 00:00:01,000;KS_1 00:00:02,000;KS_1 00:00:03,000;KS_1 00:00:04,000;KS_1 00:00:05,000;KS_1 00:00:06,000;KS_1 00:01:01,000;KS_1 00:01:02,000;KS_1 00:01:03,000;KS_1 00:01:04,000;KS_1 00:01:05,000;KS_1 00:01:06,000;KS_1 01:00:01,000;KS_1... (0 Replies)
Discussion started by: Calypso
0 Replies

4. Shell Programming and Scripting

awk count occurences

line number:status, market, keystation 1,SENT,EBS,1 : 1 2,DONE,REU,1 : 1 3,SENT,EBS,2 : 1 4,DONE,EBS,1 : 0 5,SENT,EBS,2 : 0 6,SENT,EBS,2 : 0 7,SENT,EBS,2 : 0 8,SENT,EBS,1 : 1 for each status, market combination I want to keep a tally of active orders. i.e if an order is SENT, then +1, if... (8 Replies)
Discussion started by: Calypso
8 Replies

5. Shell Programming and Scripting

Count number of occurences using awk

Hi Guys, I have 2 files like below file1 xx yy file2 b yy b2 xx c1 yy xx yy Now I want an idea which can count occurences of text from file1 and file2 so outbout would be kind of (9 Replies)
Discussion started by: prashant2507198
9 Replies

6. Shell Programming and Scripting

Count occurences based on interval

Hi, I have a file which has 4500 entries 10000 9880 9800 8700 8200 ... ..... ... ... ... ... ... ... ... 50 (1 Reply)
Discussion started by: Diya123
1 Replies

7. UNIX for Dummies Questions & Answers

Count pattern occurences

hi, I have a text..and i need to find a pattern in the text and count to the no of times the pattern occured. i have used grep command ..but the problem is , it shows the occurrences of the pattern but doesn't count no of times the pattern occuries. (5 Replies)
Discussion started by: nvnni
5 Replies

8. Shell Programming and Scripting

Count occurences of string

Hi, Please help me in finding the number of occurences of the string. Example: Apple, green, blue, Apple, Orange, green, blue are the strings can be even in the next line. The o/p should look as: Word Count ----- ----- Apple 2 green 2 Orange 1 blue 2 Thanks (2 Replies)
Discussion started by: acc888
2 Replies

9. Shell Programming and Scripting

to count the number of occurences of a column value

im trying to count the number of occurences of column 2 value(starting from KKK*) of the below file, file.txt using the code cat file.txt | awk ' BEGIN { print "Category Counts"} {FS=","} {NR > 2} { cats = cats + 1} END { for(c in cats) { print c, "=", cats} } ' but its returning as ... (6 Replies)
Discussion started by: michaelrozar17
6 Replies

10. Shell Programming and Scripting

Perl - Count occurences

I have enclosed the script. I am able to find the files that contain my search string but when I try to count the occurences within the file I get zero always. Any help on this. #!/usr/bin/perl my $find = $ARGV; my $replace = $ARGV; my $glob = $ARGV; @filelist = <*$glob>; # process each... (22 Replies)
Discussion started by: TimHortons
22 Replies
Login or Register to Ask a Question