awk if match


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk if match
# 1  
Old 08-17-2016
awk if match

Hi,

This is the file content:
Code:
#160814 20:43:00 server id 2  end_log_pos 169934694     Query        thread_id=8927407    exec_time=0    error_code=0
use sun_final/*!*/;
SET TIMESTAMP=1471207380/*!*/;
DELETE FROM `top_pack` WHERE     `top_pack`.`id` = 3023

Trying like:
Code:
awk '{if(match($0, /#16.*/)) {printf "Timestamp : " $1 " " $2}}'      <filename>

How can I match DELETE FROM `top_pack` so I can pick up and print like the below result:

Code:
Timestamp : #160814 20:43:00 Table: top_pack      Query Type : DELETE

Thanks!


Moderator's Comments:
Mod Comment
Please wrap all code, files, input & output/errors in CODE tags.
It makes them far easier to read and preserves multiple spaces for indenting or fixed width data.

Last edited by rbatte1; 08-17-2016 at 07:14 AM.. Reason: Added CODE & ICODE tags
# 2  
Old 08-17-2016
Hello ashokvpp,

Please use code tags for Inputs/commands/codes into your posts as per forum rules. Could you please try following.
Code:
awk  '{match($0,/^#[0-9]+ [0-9]+:[0-9]+:[0-9]+/);Q=substr($0,RSTART,RLENGTH); match($0,/.*FROM `top_pack/);substr($0,RSTART,RLENGTH);P=substr($0,RSTART,RLENGTH);sub(/ FROM.*/,X,P);if(Q){print "Timestamp : " Q};if(P){print "Table: top_pack Query Type : " P}}'  Input_file

Output will be as follows.
Code:
 
Timestamp : #160814 20:43:00
Table: top_pack Query Type : DELETE

If you need both output into a single line then following could be helpful.
Code:
awk  '{match($0,/^#[0-9]+ [0-9]+:[0-9]+:[0-9]+/);Q=substr($0,RSTART,RLENGTH); match($0,/.*FROM `top_pack/);substr($0,RSTART,RLENGTH);P=substr($0,RSTART,RLENGTH);sub(/ FROM.*/,X,P);if(Q){V="Timestamp : " Q};if(P && V){print V OFS "Table: top_pack Query Type : " P}}'  Input_file

Output will be as follows.
Code:
Timestamp : #160814 20:43:00 Table: top_pack Query Type : DELETE

EDIT: Adding a non-one liner form of solutions too as follows.

Solution1:
Code:
awk  '{match($0,/^#[0-9]+ [0-9]+:[0-9]+:[0-9]+/);
                Q=substr($0,RSTART,RLENGTH);
       match($0,/.*FROM `top_pack/);
                substr($0,RSTART,RLENGTH);
                P=substr($0,RSTART,RLENGTH);
                sub(/ FROM.*/,X,P);
                if(Q){
                        print "Timestamp : " Q
                     };
                if(P){
                        print "Table: top_pack Query Type : " P
                     }
      }
     '   Input_file

Solution2:
Code:
awk  '{match($0,/^#[0-9]+ [0-9]+:[0-9]+:[0-9]+/);
                Q=substr($0,RSTART,RLENGTH);
       match($0,/.*FROM `top_pack/);
                substr($0,RSTART,RLENGTH);
                P=substr($0,RSTART,RLENGTH);
                sub(/ FROM.*/,X,P);
                if(Q){
                        V="Timestamp : " Q
                     };
                if(P && V){
                                print V OFS "Table: top_pack Query Type : " P
                          }
       }
     '   Input_file

Thanks,
R. Singh

Last edited by RavinderSingh13; 08-17-2016 at 07:35 AM.. Reason: Added non-one liner forms of solutions successfully now.
This User Gave Thanks to RavinderSingh13 For This Post:
# 3  
Old 08-17-2016
Try

Input

Code:
[akshay@localhost tmp]$ cat file
#160814 20:43:00 server id 2  end_log_pos 169934694     Query        thread_id=8927407    exec_time=0    error_code=0
use sun_final/*!*/;
SET TIMESTAMP=1471207380/*!*/;
DELETE FROM `top_pack` WHERE     `top_pack`.`id` = 3023



#Assumption 1


Code:
awk '
/^#/{
        s=$1 OFS $2
}
/^.* FROM `.*`/{
       print "Timestamp : ",s,"Table :", substr($3,2,length($3)-2), "Query Type :", $1
}' file


One liner

Code:
awk '/^#/{s=$1 OFS $2}/^.* FROM `.*`/{print "Timestamp : ",s,"Table :", substr($3,2,length($3)-2), "Query Type :", $1}' file
Timestamp :  #160814 20:43:00 Table : top_pack Query Type : DELETE



#Assumption 2


Code:
awk -vn=3 '
/^.* FROM `.*`/{
     print "Timestamp : ", l[NR%n], "Table :", substr($3,2,length($3)-2), "Query Type :", $1
}
{
     l[NR%n]=$1 " "$2
}' file


One liner

Code:
awk -vn=3 '/^.* FROM `.*`/{print "Timestamp : ", l[NR%n], "Table :", substr($3,2,length($3)-2),"Query Type :", $1}{l[NR%n]=$1 " " $2}' file
Timestamp : #160814 20:43:00 Table : top_pack Query Type : DELETE



First one is better since its not using array..

Last edited by Akshay Hegde; 08-17-2016 at 07:57 AM.. Reason: to post test results
This User Gave Thanks to Akshay Hegde For This Post:
# 4  
Old 08-17-2016
Code:
awk '/^#/{s=$1 OFS $2}/^.* FROM `.*`/{print "Timestamp : ",s,"Table :", substr($3,2,length($3)-2), "Query Type :", $1}'

I need to match 3 sql's like INSERT INTO <tablename> , UPDATE <tablename> & DELETE from <tablename> from the filecontent?

Last edited by ashokvpp; 08-17-2016 at 01:48 PM..
# 5  
Old 08-17-2016
Quote:
Originally Posted by ashokvpp
Code:
awk '/^#/{s=$1 OFS $2}/^.* FROM `.*`/{print "Timestamp : ",s,"Table :", substr($3,2,length($3)-2), "Query Type :", $1}'

I need to match 3 sql's like INSERT INTO <tablename> , UPDATE <tablename> & DELETE from <tablename> from the filecontent?
Try

Code:
[akshay@localhost tmp]$ cat f
#160814 20:43:00 server id 2  end_log_pos 169934694     Query        thread_id=8927407    exec_time=0    error_code=0
use sun_final/*!*/;
SET TIMESTAMP=1471207380/*!*/;
DELETE FROM `top_pack1` WHERE     `top_pack1`.`id` = 3023
#test160814 20:43:00 server id 2  end_log_pos 169934694     Query        thread_id=8927407    exec_time=0    error_code=0
use sun_final/*!*/;
SET TIMESTAMP=1471207380/*!*/;
UPDATE `top_pack2` WHERE     `top_pack2`.`id` = 3023
#test2160814 20:43:00 server id 2  end_log_pos 169934694     Query        thread_id=8927407    exec_time=0    error_code=0
use sun_final/*!*/;
SET TIMESTAMP=1471207380/*!*/;
INSERT INTO `top_pack3` WHERE     `top_pack3`.`id` = 3023

Code:
[akshay@localhost tmp]$ awk '/^#/{s=$1 OFS $2}/^.* (FROM|INTO)? `.*`/{f=/FROM|INTO/?3:2;print "Timestamp : ",s,"Table :", substr($f,2,length($f)-2), "Query Type :", $1}' f
Timestamp :  #160814 20:43:00 Table : top_pack1 Query Type : DELETE
Timestamp :  #test160814 20:43:00 Table : top_pack2 Query Type : UPDATE
Timestamp :  #test2160814 20:43:00 Table : top_pack3 Query Type : INSERT

This User Gave Thanks to Akshay Hegde For This Post:
# 6  
Old 08-17-2016
Good to know we can use like
(FROM|INTO)?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk to print match or non-match and select fields/patterns for non-matches

In the awk below I am trying to output those lines that Match between file1 and file2, those Missing in file1, and those missing in file2. Using each $1,$2,$4,$5 value as a key to match on, that is if those 4 fields are found in both files the match, but if those 4 fields are not found then missing... (0 Replies)
Discussion started by: cmccabe
0 Replies

2. Shell Programming and Scripting

awk to update file based on partial match in field1 and exact match in field2

I am trying to create a cronjob that will run on startup that will look at a list.txt file to see if there is a later version of a database using database.txt as the source. The matching lines are written to output. $1 in database.txt will be in list.txt as a partial match. $2 of database.txt... (2 Replies)
Discussion started by: cmccabe
2 Replies

3. Shell Programming and Scripting

awk to match field between two files and use conditions on match

I am trying to look for $2 of file1 (skipping the header) in $2 of file2 (skipping the header) and if they match and the value in $10 is > 30 and $11 is > 49, then print the line from file1 to a output file. If no match is foung the line is not printed. Both the input and output are tab-delimited.... (3 Replies)
Discussion started by: cmccabe
3 Replies

4. Shell Programming and Scripting

Using awk for match and print

I have the need to match up the lat / lon from a fileA with the lat / lon and value from fileB. fileA is a small subset of fileB I have the following awk script but it prints out all the contents from fileB. I only need the matches. awk 'FNR==NR {A=$NF; next} {A=$NF} END{for(i in A) printf... (10 Replies)
Discussion started by: ncwxpanther
10 Replies

5. Shell Programming and Scripting

awk match help

Trying to match $1 of file2.txt with $1 of file 1.txt and output the entire line of the match. Thank you :) awk 'NR==FNR{A=$2; next} A {$2=$2 " " A}1' file1.txt file2.txt > output.txt file1.txt LMNA 285.195652 MZT1P1 166.852113 HFM1 129.847940 file2.txt LMNA PTPN11... (3 Replies)
Discussion started by: cmccabe
3 Replies

6. Shell Programming and Scripting

Better way to match a list in awk

Suppose I have a list of strings in a file called stringlist... string1 string2 ... stringn Suppose also that I have another file, or stdin, or whatever, and I want to use awk to see if some field in each record matches any string in stringlist. What I've been doing is using each string... (3 Replies)
Discussion started by: treesloth
3 Replies

7. Shell Programming and Scripting

awk - multiple match

I need to exttract the color fields shown below. The parenthesis can contain almost anything. Updated: 11b -98db random junk CH: 1 random junk (a space) random junk 11g -82db random junk CH: 2 random junk (most_characters) random junk 11n -73db random junk CH: 11 random junk (sometimes... (9 Replies)
Discussion started by: Kiah07
9 Replies

8. UNIX for Dummies Questions & Answers

awk display the match and 2 lines after the match is found.

Hello, can someone help me how to find a word and 2 lines after it and then send the output to another file. For example, here is myfile1.txt. I want to search for "Error" and 2 lines below it and send it to myfile2.txt I tried with grep -A but it's not supported on my system. I tried with awk,... (4 Replies)
Discussion started by: eurouno
4 Replies

9. Shell Programming and Scripting

AWK match and print

I have thousands of tables compiled in a single txt document that I'm parsing with AWK. Scattered throughout the document in random sections I would like to parse out the sections that look like this: 1 Seq. Descrição do bem Tipo do bem Valor do bem (R$) 2 1 LOCALIZADO ANA RUA PESSEGO N 96... (3 Replies)
Discussion started by: daveyabe
3 Replies

10. UNIX for Advanced & Expert Users

dynamic match thru awk

hey , my i/p text looks like this, FILE_TYPE=01|FILE_DESC=Periodic|FILE_SCHDL_TYPE=Daily|FILE_SCHDL=|FILE_SCHDL_TIME=9:00am|RESULTS=B FILE_TYPE=02|FILE_DESC=NCTO|FILE_SCHDL_TYPE=Daily|FILE_SCHDL=|FILE_SCHDL_TIME=9:00am|RESULTS=M NOTE Look carefully for the position FILE_TYPE,FILE_DESC... (23 Replies)
Discussion started by: manas_ranjan
23 Replies
Login or Register to Ask a Question