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 #487
Difficulty: Easy
A program's entry point is always defined by a main function or method.
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