How to count number of results found?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to count number of results found?
# 8  
Old 03-27-2013
I actually prefer counting the words even if its between other words, so RudiC seems the best option, anyways all the replies helped me a lot, so thanks to all!

---------- Post updated at 06:49 PM ---------- Previous update was at 05:44 PM ----------

Quote:
Originally Posted by RudiC
Using gary_w's files, would this satisfy your needs:
Code:
$ grep -of x1.dat x2.dat| sort |uniq -c
      3 word1
      5 word2
      8 word3

---------- Post updated at 12:50 ---------- Previous update was at 12:44 ----------


That wouldn't help. Remove the space in grep's "$i " parameter...
Unfortunately the grep -o is not installed in my server, and I cant do anything about it.

grep: illegal option -- o

Do you know if its possible to do something similar?

---------- Post updated at 08:58 PM ---------- Previous update was at 06:49 PM ----------

I got the result expected by using the following:

Code:
for i in $(cat x1.dat); do echo "$i ";tr -s ' ' '\n' < x2.dat| grep -c "$i";done

However, the result is coming up like this:

word1
3
word2
5
word3
8

But I expected to be like this:

3 word1
5 word2
8 word3

Can anyone help further?
# 9  
Old 03-27-2013
Here is a KSH script using Associative Arrays for counting words:
Code:
#!/bin/ksh

typeset -A word_ARR

while read line
do
        for word in $line
        do
                (( word_ARR[$word]++ ))
        done
done < file.txt

for key in ${!word_ARR[*]}
do
        print ${word_ARR[$key]} $key
done

This User Gave Thanks to Yoda For This Post:
# 10  
Old 03-27-2013
Quote:
Originally Posted by Yoda
Here is a KSH script using Associative Arrays for counting words:
Code:
#!/bin/ksh

typeset -A word_ARR

while read line
do
        for word in $line
        do
                (( word_ARR[$word]++ ))
        done
done < file.txt

for key in ${!word_ARR[*]}
do
        print ${word_ARR[$key]} $key
done

I may be doing something wrong, but I'm unable to get any results from this script.

I ran the same , only replacing the file input name.
Tried in 2 dif envs:

1-$ ./array
./array[3]: typeset: bad option(s)
2-$./array
bash: ./array: /bin/ksh: bad interpreter: No such file or directory

Any clue where is the problem?
# 11  
Old 03-28-2013
The problem is that /bin/ksh apparently does not exist on your system.

Please try the following, assuming it runs on your system:
Code:
$ cat file1
word1
word2
word3

Code:
$ cat file2
word1
word2 word3
word2 word3 word3 word4

Code:
$ cat temp.sh
grep -f file1 file2 > good_lines
sed "s/\<[a-zA-Z0-9_]\+\>/&\n/g" good_lines > split_lines
grep -f file1 split_lines | sed "s/^ *//; s/ *$//" > matched_words
sort matched_words | uniq -c

Code:
$ ./temp.sh
      1 word1
      2 word2
      3 word3

I defined a "Word" as the standard [a-zA-Z0-9_].
So this includes "Words" with numbers and underscores.
Alternatively, you could use [a-zA-Z].
Or maybe you want to count "auto-correct" as one word.
In that case, [a-zA-Z-] would work.
This User Gave Thanks to hanson44 For This Post:
# 12  
Old 03-28-2013
I forgot to mention that you require KSH93 to support this code.

KSH88 does not support typeset option -a to define arrays.
This User Gave Thanks to Yoda For This Post:
# 13  
Old 03-28-2013
Quote:
Originally Posted by hanson44
The problem is that /bin/ksh apparently does not exist on your system.

Please try the following, assuming it runs on your system:
Code:
$ cat file1
word1
word2
word3

Code:
$ cat file2
word1
word2 word3
word2 word3 word3 word4

Code:
$ cat temp.sh
grep -f file1 file2 > good_lines
sed "s/\<[a-zA-Z0-9_]\+\>/&\n/g" good_lines > split_lines
grep -f file1 split_lines | sed "s/^ *//; s/ *$//" > matched_words
sort matched_words | uniq -c

Code:
$ ./temp.sh
      1 word1
      2 word2
      3 word3

I defined a "Word" as the standard [a-zA-Z0-9_].
So this includes "Words" with numbers and underscores.
Alternatively, you could use [a-zA-Z].
Or maybe you want to count "auto-correct" as one word.
In that case, [a-zA-Z-] would work.
The standard word you defined is great as it is.

I created the temp script but it did not work as expected in one of my systems

Code:
 $ ./temp.sh
sed: Function s/\<[a-zA-Z0-9_]\+\>/& cannot be parsed.

I'm not sure why some sed functions are not functioning/installed here. Any ideas to circumvent this error?

However in my other system the result was as expected, so thanks a lot!

---------- Post updated at 06:59 PM ---------- Previous update was at 06:47 PM ----------

Quote:
Originally Posted by demmel
The standard word you defined is great as it is.

I created the temp script but it did not work as expected in one of my systems

Code:
 $ ./temp.sh
sed: Function s/\<[a-zA-Z0-9_]\+\>/& cannot be parsed.

I'm not sure why some sed functions are not functioning/installed here. Any ideas to circumvent this error?

However in my other system the result was as expected, so thanks a lot!
I was able to prevent the error by using single quotes instead of double quotes, still the result did not come right, see below:

Code:
$ ./temp.sh
   1 word1
   1 word2 word3
   1 word2 word3 word3 word4

This is the content of the file split_lines:
Code:
word1
word2 word3
word2 word3 word3 word4

Any ideas?

Last edited by demmel; 03-28-2013 at 07:09 PM..
# 14  
Old 03-28-2013
It's something to do with the sed line. The best way to figure it out is to copy and paste the temp.sh shell script, exactly as it is on your system, and include it with the message. No point in guessing.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Grep command to show the number of results

Hi I wanted to know if there is an option in grep command to show the number of results (not the number of lines of findings). Thanks (14 Replies)
Discussion started by: abdossamad2003
14 Replies

2. Shell Programming and Scripting

Count occurences of a character in a file by sorting results

Hello, I try to sort results of occurences in an array by using awk but I can't find the right command. that's why I'm asking your help ! :) Please see below the command that I run: awk '{ for ( i=1; i<=length; i++ ) arr++ }END{ for ( i in arr ) { print i, arr } }' dictionnary.txt ... (3 Replies)
Discussion started by: destin45
3 Replies

3. Shell Programming and Scripting

awk Help -- If match found return the count

Hi All, I need to get the count of records in the file, if the passing parameter matches with the list of records in the file. Below is my example source file: Test1.dat 20120913 20120913 20120912 20120912 20120912 20120912 20120912 20120913 20120913 20120912 In my script I am... (5 Replies)
Discussion started by: bbc17484
5 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. Shell Programming and Scripting

Awk - Count instances of a number in col1 and put results in a col2 (new) of diff file

I have 2 files as follows: filename1: : 6742 /welcome/mundial98_ahf1_404.htm 1020 6743 /welcome/mundial98_ahf1_404.htm 2224 6744 /welcome/mundial_ef1_404.htm 21678 6745 /welcome/mundial_if_404.htm 4236 6746 /welcome/mundial_lf1_404.htm 21678 filename2: 6746 894694763 1... (2 Replies)
Discussion started by: jontjioe
2 Replies

6. Shell Programming and Scripting

found count of them

Hi guys i must write a program which read logfile of my program and print the result. i wrote this and i want print of the user who have virus. i extract user and put it in file, now i want know each user have how many virus. how can i do this in bash, my file is like: and soso i... (5 Replies)
Discussion started by: Skipper
5 Replies

7. Shell Programming and Scripting

count the number of lines that start with the number

I have a file with contents similar to this. abcd 1234 4567 7666 jdjdjd 89289 9382 92 jksdj 9823 298 I want to write a shell script which count the number of lines that start with the number (disregard the lines starting with alphabets) (1 Reply)
Discussion started by: grajp002
1 Replies

8. UNIX for Dummies Questions & Answers

putting grep -c results number in a variable

I want to display "no results found" if a grep search of a name that the user inputs is not found anywhere in a certain file, Right now I have this, but doesn't seem to work. Im not sure what to change. read name results=grep -c $name file if ; then echo "No results found." exit... (1 Reply)
Discussion started by: busdude
1 Replies

9. Shell Programming and Scripting

Number count per number ranges

Hi, I have a question here that need to get advise from all of you. Let say I have a set of data 12347777 12359899 12347677 12360090 12347688 12359979 12359009 12367022 12346677 I need to count the number that appear in each numbering ranges and the output is like below: Prefix ... (5 Replies)
Discussion started by: shirleyeow
5 Replies

10. UNIX for Dummies Questions & Answers

awk | stop after specified number of results

I am searching some rather large text files using grep and or awk. What I would like to know is if there is a way (either with grep, awk, or realy any other unix tool) to stop the search when a predifined number of results are returned. I would like to do this for speed purpuses. When i get... (6 Replies)
Discussion started by: evan108
6 Replies
Login or Register to Ask a Question