Visit Our UNIX and Linux User Community


Search string within a file and list common words from the line having the search string


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Search string within a file and list common words from the line having the search string
# 1  
Old 10-15-2013
Search string within a file and list common words from the line having the search string

Hi,

Need your help for this scripting issue I have. I am not really good at this, so seeking your help.

I have a file looking similar to this:

Hello, i am human and name=ABCD.
How are you?
Hello, i am human and name=PQRS.
I am good.
Hello, i am human and name=ABCD.
Good bye.

Hello, i am human and name=XYZ.

Now I need to search "human" keyword within this file and then list out the values after "name=" and also the count of common values.
i.e. output would be:

Count of "human"=4
Count for name "ABCD"=2
Count for name "PQRS"=1
Count for name "XYZ"=1

Please help me how to do this.
I can get the lines having "human" with this and the total count of 'human':
Code:
COUNT=`echo $(grep "human" $LFILE | wc -l)`
grep "human" $LFILE

Please help
Thanks
# 2  
Old 10-15-2013
Hi,

Could you please use the following script for same.

Code:
count_xyz=0
count_pqrs=0
count_abcd=0
abcd="ABCD"
xyz="XYZ"
pqrs="PQRS"
icount_human=0
count_human=0
while read line
do
check_human=`echo $line | grep "human"`
name_check=`echo $line | grep "name"`
value_name_check=`echo $name_check | awk -F"=" '{print$2}' | grep -v '^$' | cut -f1 -d.`

if [[ -n ${check_human} ]]
then
let "count_human = count_human + 1"
fi
if [[ "$value_name_check" == "$abcd" ]]
then
let "count_abcd = count_abcd + 1"
fi

if [[ "$value_name_check" == "$pqrs" ]]
then
let "count_pqrs = count_pqrs + 1"
fi

if [[ "$value_name_check" == "$xyz" ]]
then
let "count_xyz = count_xyz + 1"
fi

done < "requirement_check_count"

echo "Count for human is=" $count_human
echo "Count for ABCD=" $count_abcd
echo "Count for PQRS=" $count_pqrs
echo "Count for XYZ=" $count_xyz



Output will be as follows then.


Code:
$ ksh check_requirement_check_count.ksh
Count for human is= 4
Count for ABCD= 2
Count for PQRS= 1
Count for XYZ= 1


Thanks,
R. Singh
# 3  
Old 10-15-2013
Hi R Singh,

Thanks for your reply. I missed mentioning one info that is the values after "name=" are not static/fixed but can change/dynamic. I used ABCD/PQRS/XYZ as examples only.

Its like extracting the string after "name=" for all lines having "human" and then count the total occurances for each value of "name="
# 4  
Old 10-15-2013
An awk solution:
Code:
$ awk '/human/ {humans++; values[$2]++} END {printf "Humans: %s\n", humans; for (i in values) {printf "%s: %s\n", i, values[i]}}' FS== file
Humans: 4
XYZ.: 1
ABCD.: 2
PQRS.: 1

Note that this will pick up anything after = - if you want name= specifically (and not the period on the end) then it will be a little more complex.
# 5  
Old 10-15-2013
Little modification in CarloM code (used match function and pass variable to awk)
Code:
awk -v var="human" '/human/{count++; match($0,/=(.+?)$/) ; a=substr($0,RSTART+1,RLENGTH-2);array[a]++} END { print "count of "var"="count; for (i in array) {print "count of name "i "="array[i];} }' filename

# 6  
Old 10-15-2013
Quote:
Hi R Singh,

Thanks for your reply. I missed mentioning one info that is the values after "name=" are not static/fixed but can change/dynamic. I used ABCD/PQRS/XYZ as examples only.

Its like extracting the string after "name=" for all lines having "human" and then count the total occurances for each value of "name="
royzlifeHi R Singh,

Thanks for your reply. I missed mentioning one info that is the values after "name=" are not static/fixed but can change/dynamic. I used ABCD/PQRS/XYZ as examples only.

Its like extracting the string after "name=" for all lines having "human" and then count the total occurances for each value of "name="

Hello,

here is script solution for same.

Code:
> Output_latest
k=0
null=`echo ""`
count_human=0
count=0
zero=0

while read line
do
count=0
check_human=`echo $line | grep "human" | grep -v '^$`
name_check=`echo $line | grep "name" | grep -v '^$'`
set -A value_name_check
value_name_check=`echo $name_check | awk -F"=" '{print$2}' | grep -v '^$' | cut -f1 -d.`

                while read line1
                do
                check_count=`echo $line1 | grep -v '^$' |  grep "$value_name_check".`
                                if [[ -n ${check_count} ]]
                                then
                                let "count = count + 1"
                                fi

                done < "requirement_check_count"
                if [[ -n ${check_human} ]]
                then
                let "count_human = count_human + 1"
                fi
        if [[ "$value_name_check" != "$null" ]]
        then
        echo "Count for" $value_name_check "is" $count >> Output_latest
        fi
done < "requirement_check_count"
echo "Count for human is=" $count_human
 

awk '!x[$0]++' Output_latest


Output will be as follows.


Code:
$ ksh check_requirement_check_count1.ksh
Count for human is= 4
Count for ABCD is 2
Count for PQRS is 1
Count for XYZ is 1


Thanks,
R. Singh
# 7  
Old 10-15-2013
The formatting may not be exactly the expected one but all the needed info will still be there:
Assuming your file is exactly formatted as you stated

Code:
$ sed '/human/!d;s/.*name=/human\n/' yourfile | sort | uniq -c


Previous Thread | Next Thread
Test Your Knowledge in Computers #600
Difficulty: Medium
Functions in C do not need be declared before they can be used.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Search a string in a file and change another in the line

I did it myself (0 Replies)
Discussion started by: apenkov
0 Replies

2. UNIX for Dummies Questions & Answers

Search for a string,delete the line and replace with new string in a file

Hi Everyone, I have a requirement in ksh where i have a set of files in a directory. I need to search each and every file if a particular string is present in the file, delete that line and replace that line with another string expression in the same file. I am very new to unix. Kindly help... (10 Replies)
Discussion started by: Pradhikshan
10 Replies

3. Shell Programming and Scripting

Search string or words in logs without using Grep

I'm in need of some kind of script that will search for a string in each logfile in a directory but we don't want to use GREP. GREP seems to use up to much of our memory causing the server to use up a lot of swap space. Our log files are bigger than 500M on a daily basis. We lately started... (8 Replies)
Discussion started by: senormarquez
8 Replies

4. Shell Programming and Scripting

Search a string in a text file and add another string at the end of line

Dear All I am having a text file which is having more than 200 lines. EX: 001010122 12000 BIB 12000 11200 1200003 001010122 2000 AND 12000 11200 1200003 001010122 12000 KVB 12000 11200 1200003 In the above file i want to search for string KVB... (5 Replies)
Discussion started by: suryanarayana
5 Replies

5. Shell Programming and Scripting

Search a string in a text file and add another string at the particular position of a line

I am having a text file which is having more than 200 lines. EX: 001010122 12000 BIB 12000 11200 1200003 001010122 2000 AND 12000 11200 1200003 001010122 12000 KVB 12000 11200 1200003 In the above file i want to search for string KVB and add/replace... (1 Reply)
Discussion started by: suryanarayana
1 Replies

6. Shell Programming and Scripting

Search several string and convert into a single line for each search string using awk command AIX?.

I need to search the file using strings "Request Type" , " Request Method" , "Response Type" and by using result set find the xml tags and convert into a single line?. below are the scenarios. Cat test Nov 10, 2012 5:17:53 AM INFO: Request Type Line 1.... (5 Replies)
Discussion started by: laknar
5 Replies

7. Shell Programming and Scripting

List file's name and search string's Line

Hi all, My need is: To list out all the java / jsp files having System.out.println in my project. I need the output as: /home/me/project/file1.java somejavacode somejavacode System.out.println("something"); somejavacode somejavacode somejavacode /home/me/project/file2.java... (8 Replies)
Discussion started by: linuxadmin
8 Replies

8. UNIX for Dummies Questions & Answers

Search String in File List

Hi, I have a list of files which can be identified as abcd*.xml where * represent multiple timestamps for multiple files. I need to do following checks 1. Find number of files (which we get by doing following) FILECOUNT=`ls -ltr /dir/abcd*.xml | wc -l` 2. If check 1 gives '1' as... (2 Replies)
Discussion started by: dsrookie
2 Replies

9. Shell Programming and Scripting

search string in a file and retrieve 10 lines including string line

Hi Guys, I am trying to write a perl script to search a string "Name" in the file "FILE" and also want to create a new file and push the searched string Name line along with 10 lines following the same. can anyone of you please let me know how to go about it ? (8 Replies)
Discussion started by: sukrish
8 Replies

10. Shell Programming and Scripting

Perl: Search for string on line then search and replace text

Hi All, I have a file that I need to be able to find a pattern match on a line, search that line for a text pattern, and replace that text. An example of 4 lines in my file is: 1. MatchText_randomNumberOfText moreData ReplaceMe moreData 2. MatchText_randomNumberOfText moreData moreData... (4 Replies)
Discussion started by: Crypto
4 Replies

Featured Tech Videos