Visit Our UNIX and Linux User Community


Search 3 words


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Search 3 words
# 8  
Old 07-31-2009
I have no system avalaible with gawk.
Try this new version of awk script :
Code:
awk '
{ $0 = tolower($0) }
/^[[:space:]]*(procedure|function)/ {
   check_procedure();
   memorize  = 1;
}
memorize {
   procedure = procedure " " $0;
   gsub(/\/\*[^*]*\*\//, "", procedure);   
   if (procedure ~ /end[[:space:]]*;/) check_procedure();}
END {
   check_procedure();
}
function check_procedure() {
    gsub(/[[:space:]]+/, " ", procedure);
    if (procedure ~/insert into xyz/) {
      split(procedure, f);
      print f[1],f[2];
   }
   procedure = "";
   memorize  = 0;}
' in.sql

Jean-Pierre.
# 9  
Old 07-31-2009
Tried with this, however getting below error. Attaching file test.txt for you refer your reference.

awk: The result procedure load_file of the gsub function
cannot be longer than 3,000 bytes.


Quote:
Originally Posted by aigles
I have no system avalaible with gawk.
Try this new version of awk script :
Code:
awk '
{ $0 = tolower($0) }
/^[[:space:]]*(procedure|function)/ {
   check_procedure();
   memorize  = 1;
}
memorize {
   procedure = procedure " " $0;
   gsub(/\/\*[^*]*\*\//, "", procedure);   
  if (procedure ~ /end[[:space:]]*;/) check_procedure();}
END {
   check_procedure();
}
function check_procedure() {
    gsub(/[[:space:]]+/, " ", procedure);
    if (procedure ~/insert into xyz/) {
      split(procedure, f);
      print f[1],f[2];
   }
  procedure = "";
  memorize  = 0;}
' in.sql

Jean-Pierre.
# 10  
Old 07-31-2009
Last attempt, another way without using gsub function :
Code:
awk -v RS='[[:space:]()\n]' -v Text='insert into xyz' '
BEGIN {
   Words_count = split(tolower(Text), Word);
   In_proc        = 0;
   Skip_comment   = 0;
   Wait_proc_name = 0;
}

!NF { next }
{ $0 = tolower($0) }

/^\/\*/ {
   Skip_comment = 1;
   next;
}

Skip_comment {
   if ($0 !~ /\*\/$/) next;
   Skip_comment = 0;
   next;
}

Wait_proc_name {
   Proc_name      = $0;
   Wait_proc_name = 0;
   next;
}

/(procedure|function)$/ {
   Proc_type      = $0;
   Wait_proc_name = 1;
   Index_word     = 1;
   In_proc        = 1;
   next;
}

In_proc {
   if ($0 != Word[Index_word]) next;
   if (Index_word == Words_count) {
      print Proc_type, Proc_name;
      Index_word = 0;
      In_proc    = 0;
   }
   Index_word++;
}

' inputfile

Jean-Pierre.
# 11  
Old 08-01-2009
Well, thanks for bearing with me aigles. Latest command is also not working ad I am getting "awk: Input line procedure test1 insert cannot be longer than 3,000 bytes.". errors. Anyway in future, if you have time, pls reply for that. I have already attached file 'test.txt', that you can use for your reference.


Quote:
Originally Posted by aigles
Last attempt, another way without using gsub function :
Code:
awk -v RS='[[:space:]()\n]' -v Text='insert into xyz' '
BEGIN {
   Words_count = split(tolower(Text), Word);
   In_proc        = 0;
   Skip_comment   = 0;
   Wait_proc_name = 0;
}
 
!NF { next }
{ $0 = tolower($0) }
 
/^\/\*/ {
   Skip_comment = 1;
   next;
}
 
Skip_comment {
   if ($0 !~ /\*\/$/) next;
   Skip_comment = 0;
   next;
}
 
Wait_proc_name {
   Proc_name      = $0;
   Wait_proc_name = 0;
   next;
}
 
/(procedure|function)$/ {
   Proc_type      = $0;
   Wait_proc_name = 1;
   Index_word     = 1;
   In_proc        = 1;
   next;
}
 
In_proc {
   if ($0 != Word[Index_word]) next;
   if (Index_word == Words_count) {
      print Proc_type, Proc_name;
      Index_word = 0;
      In_proc    = 0;
   }
   Index_word++;
}
 
' inputfile

Jean-Pierre.
# 12  
Old 08-01-2009
Sounds like if input line is greater than 3000 bytes.
Instead of:
Code:
awk ..... inputfile

Try:
Code:
fold -s -w 300 inputfile | awk ...

Jean-Pierre.
# 13  
Old 08-01-2009
Still I am getting same error.

The final command is...

fold -s -w 300 test.txt | awk -v RS='[[:space:]()\n]' -v Text='insert into xyz' '
BEGIN {
Words_count = split(tolower(Text), Word);
In_proc = 0;
Skip_comment = 0;
Wait_proc_name = 0;
}
!NF { next }
{ $0 = tolower($0) }
/^\/\*/ {
Skip_comment = 1;
next;
}
Skip_comment {
if ($0 !~ /\*\/$/) next;
Skip_comment = 0;
next;
}
Wait_proc_name {
Proc_name = $0;
Wait_proc_name = 0;
next;
}
/(procedure|function)$/ {
Proc_type = $0;
Wait_proc_name = 1;
Index_word = 1;
In_proc = 1;
next;
}
In_proc {
if ($0 != Word[Index_word]) next;
if (Index_word == Words_count) {
print Proc_type, Proc_name;
Index_word = 0;
In_proc = 0;
}
Index_word++;
}'
.

Quote:
Originally Posted by aigles
Sounds like if input line is greater than 3000 bytes.
Instead of:
Code:
awk ..... inputfile

Try:
Code:
fold -s -w 300 inputfile | awk ...

Jean-Pierre.

Previous Thread | Next Thread
Test Your Knowledge in Computers #314
Difficulty: Easy
Pointers were not used in the original C programming language and were added later in in C++.
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