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
Test Your Knowledge in Computers #369
Difficulty: Medium
The name bytecode originates from instruction sets that have zero-byte opcodes followed by optional parameters.
True or False?

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