Visit Our UNIX and Linux User Community


Search 3 words


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Search 3 words
# 1  
Old 07-30-2009
Search 3 words

Hi All,
I have almost 1000+ files and I want to search specific pattern. Looking forwarded your input. Pls note that need to ignore words in between /* */
Search for: "insert into xyz" (Which procedure contain all 3).
Expected output:
procedure test1
procedure test2
procedure test3

File Contain:
procedure test1
insert into xyz;
end;
procedure
test2
insert
into
xyz
end;
procedure test3
insert /* asas*/
into xyz
end;
procedure test4
inserting into xyz
end;
# 2  
Old 07-30-2009
try below perl:

Code:
local $/="end;";
while(<DATA>){
	print "procedure $1\n" if /procedure\s*(\S*).*insert\s*(\/\*.*\*\/\s*)*\s*into\s*xyz/s;
}
__DATA__
File Contain:
procedure test1 
insert into xyz;
end;
procedure 
test2 
insert
into
xyz
end;
procedure test3
insert /* asas*/  
into xyz
end;
procedure test4
inserting into xyz
end;
procedure test5
inserting aa into xyz
end;

# 3  
Old 07-30-2009
Quote:
Originally Posted by summer_cherry
try below perl:

Code:
local $/="end;";
while(<DATA>){
    print "procedure $1\n" if /procedure\s*(\S*).*insert\s*(\/\*.*\*\/\s*)*\s*into\s*xyz/s;
}
__DATA__
File Contain:
procedure test1 
insert into xyz;
end;
procedure 
test2 
insert
into
xyz
end;
procedure test3
insert /* asas*/  
into xyz
end;
procedure test4
inserting into xyz
end;
procedure test5
inserting aa into xyz
end;

Thanks for reply Cherry, however I do't want to execute via perl. I m looking for Unix command.
# 4  
Old 07-30-2009
Two solutions using awk and gawk
With awk :
Code:
awk '
{ $0 = tolower($0) }
/^[[:space:]]*procedure/ {
   check_procedure();
   procedure = ""
}
{
   procedure = procedure " " $0;
}
END {
   check_procedure();
}
function check_procedure() {
   gsub(/\/\*[^*]*\*\//, "", procedure);
   gsub(/[[:space:]]+/, " ", procedure);
   if (procedure ~/insert into xyz/) {
      split(procedure, f);
      print "procedure",f[2];
   }
}
' inputfile

With gawk :
Code:
awk -v RS=procedure '
{
   gsub(/\n/, " ");
   gsub(/\/\*[^*]*\*\//, "");
   gsub(/[[:space:]]+/, " ")
   $0 = tolower($0);
}
/insert into xyz/ {
   print "procedure",$1
}
' inputfile

Inputfile:
Code:
procedure test1
insert into xyz;
end;
procedure
test2
insert
into
xyz
end;
procedure test3
insert /* asas*/
into xyz
end;
procedure test4
inserting into xyz
end;
procedure test5
insert into abcdef
end;

Output:
Code:
procedure test1
procedure test2
procedure test3

Jean-Pierre.
# 5  
Old 07-30-2009
Quote:
Originally Posted by aigles
Two solutions using awk and gawk
With awk :
Code:
awk '
{ $0 = tolower($0) }
/^[[:space:]]*procedure/ {
   check_procedure();
   procedure = ""
}
{
   procedure = procedure " " $0;
}
END {
   check_procedure();
}
function check_procedure() {
   gsub(/\/\*[^*]*\*\//, "", procedure);
   gsub(/[[:space:]]+/, " ", procedure);
   if (procedure ~/insert into xyz/) {
      split(procedure, f);
      print "procedure",f[2];
   }
}
' inputfile

With gawk :
Code:
awk -v RS=procedure '
{
   gsub(/\n/, " ");
   gsub(/\/\*[^*]*\*\//, "");
   gsub(/[[:space:]]+/, " ")
   $0 = tolower($0);
}
/insert into xyz/ {
   print "procedure",$1
}
' inputfile

Inputfile:
Code:
procedure test1
insert into xyz;
end;
procedure
test2
insert
into
xyz
end;
procedure test3
insert /* asas*/
into xyz
end;
procedure test4
inserting into xyz
end;
procedure test5
insert into abcdef
end;

Output:
Code:
procedure test1
procedure test2
procedure test3

Jean-Pierre.
Thanks for wonderful response. This is working fine for me, however I forget to mention one this, i.e. it could be "procedure" or "function". I need to consider both, however above code only taking care of "procedure". Pls find the latest file and expected output.

Expected output:
procedure test1
function test2
procedure test3

File Contain:
procedure test1
insert into xyz;
end;

function

test2

insert

into
xyz
end;

procedure test3
insert /* asas*/
into xyz
end;

procedure test4
inserting into xyz
end;

Request you to update the command ASAP.
# 6  
Old 07-31-2009
A new version of the awk solution :
Code:
awk '
{ $0 = tolower($0) }
/^[[:space:]]*(procedure|function)/ {
   check_procedure();
   procedure = ""
}
{
   procedure = procedure " " $0;
}
END {
   check_procedure();
}
function check_procedure() {
   gsub(/\/\*[^*]*\*\//, "", procedure);
   gsub(/[[:space:]]+/, " ", procedure);
   if (procedure ~/insert into xyz/) {
      split(procedure, f);
      print f[1],f[2];
   }
}
' inputfile

Inputfile:
Code:
procedure test1
insert into xyz;
end;
procedure
test2
insert
into
xyz
end;
procedure test3
insert /* asas*/
into xyz
end;
procedure test4
inserting into xyz
end;
procedure test5
insert into abcdef
end;
function ftest
insert into
xyz
end;

Output:
Code:
procedure test1
procedure test2
procedure test3
function ftest

Jean-Pierre.
# 7  
Old 07-31-2009
Thanks for your reply. Can you modify gawk command as well.

Quote:
Originally Posted by aigles
A new version of the awk solution :
Code:
awk '
{ $0 = tolower($0) }
/^[[:space:]]*(procedure|function)/ {
   check_procedure();
   procedure = ""
}
{
   procedure = procedure " " $0;
}
END {
   check_procedure();
}
function check_procedure() {
   gsub(/\/\*[^*]*\*\//, "", procedure);
   gsub(/[[:space:]]+/, " ", procedure);
   if (procedure ~/insert into xyz/) {
      split(procedure, f);
      print f[1],f[2];
   }
}
' inputfile

Inputfile:
Code:
procedure test1
insert into xyz;
end;
procedure
test2
insert
into
xyz
end;
procedure test3
insert /* asas*/
into xyz
end;
procedure test4
inserting into xyz
end;
procedure test5
insert into abcdef
end;
function ftest
insert into
xyz
end;

Output:
Code:
procedure test1
procedure test2
procedure test3
function ftest

Jean-Pierre.


---------- Post updated at 09:07 AM ---------- Previous update was at 08:00 AM ----------

I am getting " Memory fault(coredump)" error. I guess gawk should work fine. Can you pls modify gawk command.

Quote:
Originally Posted by susau_79
Thanks for your reply. Can you modify gawk command as well.

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Search words in any quote position and then change the words

hi, i need to replace all words in any quote position and then need to change the words inside the file thousand of raw. textfile data : "Ninguno","Confirma","JuicioABC" "JuicioCOMP","Recurso","JuicioABC" "JuicioDELL","Nulidad","Nosino" "Solidade","JuicioEUR","Segundo" need... (1 Reply)
Discussion started by: benjietambling
1 Replies

2. Shell Programming and Scripting

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... (12 Replies)
Discussion started by: royzlife
12 Replies

3. Shell Programming and Scripting

Search between two words

Hello, I try to print out with sed or awk the 21.18 between "S3 Temperature" and "GrdC" in a text file. The blanks are all real blanks no tabs. Only the two first chars from temperture are required. So the "21" i need as output. S3 Temperatur 21.18 GrdC No Alarm ... (3 Replies)
Discussion started by: felix123
3 Replies

4. Shell Programming and Scripting

search from a list of words

Hello, I'm trying to write a bash script that will search for words from one list that may be found in another list. Once the record is found, it will create a new text file for each word. For example, list1.txt contains the following: Dog Cat Fish List2.txt contains Dog - Buddy 14... (3 Replies)
Discussion started by: jl487
3 Replies

5. Shell Programming and Scripting

want to search for the words in the files

Hi Friends, I have been trying to write the script since morning and reached some where now. but i think i am stuck in the final step. please help I want to search the strings below in red in the be be searched in the directories below. How can i do that in my shell script. Thanks Adi ... (8 Replies)
Discussion started by: asirohi
8 Replies

6. UNIX for Dummies Questions & Answers

how can i delete words based on search

hi, I have a doubt. how we can remove few words based on search. here im specifying my requirement with example. ALL the words should delete between two words ... those words will ends ** EX : cat infile.txt "HI",ob1**,ob2,ob3,ob4**,ob5,ob6 OUTPUT... (2 Replies)
Discussion started by: spc432
2 Replies

7. UNIX for Dummies Questions & Answers

search words in different file

Hi, I have 1 - 100 file I want the list of such file which contains word 'internet' Please provide command to do this (3 Replies)
Discussion started by: kaushik02018
3 Replies

8. Shell Programming and Scripting

search two words in sed

I've following sed command working fine - sed '/search_pattern1/ !s/pattern1/pattern2/" file Now, I want to search two patterns - search_pattern1 and search_pattern2 . How can put these into above sed statement ? Thanks in advance. (12 Replies)
Discussion started by: ajitkumar2
12 Replies

9. Shell Programming and Scripting

Search and replace words between two keywords

Hi, I have a file which contains the following : select * from test where test_id=1; select id from test1, test2 where test_id=1 and test_id=2; select * from test1, test2, test3 where test_id=4 and test2_id where in (select test2_id from test2); select id1, id2 from test ... (6 Replies)
Discussion started by: vrrajeeb
6 Replies

10. Shell Programming and Scripting

search for words in file

hi all, i would like to search in a directory. all files they were found shoul be opend and looked about a keyword. if keyword is found i want to see the name of the file. i've rtfm of find and have a command like this : find /etc -exec cat \{}\ | grep KEYWORD but don't work, and : find... (4 Replies)
Discussion started by: Agent_Orange
4 Replies

Featured Tech Videos