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


Login or Register for Dates, Times and to Reply

 
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  
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  
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  
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  
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  
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  
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  
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

Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #817
Difficulty: Medium
In CSS, E[foo="bar"] matches an E element whose "foo" attribute value is exactly equal to "bar".
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