awk script to match string and print status


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers awk script to match string and print status
# 1  
awk script to match string and print status

Dear team,

Need support to built awk script for below requirement

Input file

Code:
LOTC cluster state:
-------------------
Node safNode=SC_2_1 joined cluster | 
Node safNode=SC_2_2 joined cluster | 
Node safNode=PL_2_3 fail cluster | 

AMF cluster state:
------------------
saAmfNodeAdminState."safAmfNode=SC-1,safAmfCluster=myAmfCluster": Unlocked
saAmfNodeOperState."safAmfNode=SC-1,safAmfCluster=myAmfCluster": Enabled
saAmfNodeAdminState."safAmfNode=SC-2,safAmfCluster=myAmfCluster": locked
saAmfNodeOperState."safAmfNode=SC-1,safAmfCluster=myAmfCluster": disabled

Here from this input file need if "LOTC cluster state:" has status other than "joined" i.e fail then need to print "LOTC Cluster status is not ok"
and
if "AMF cluster state:" has status other than "unlocked and enabled" in last column than need to print "AMF cluster state: is not ok".

The number of lines in input file for both titles can vary in numbers.
# 2  
Hello shanul karim,

Sorry but this is NOT the way UNIX.com forums work. We do encourage people to add their efforts which they have put in order to solve their own problems, so please do add your efforts in your question and let us know then.

I am also adding tag to make this Amber color once you add efforts that will be reverted then.

Thanks,
R. Singh
# 3  
Code:
awk 'NF>1 && /LOTC cluster state:/{print "lotc cluster"}/Node/{ if ($3!="joined") print "LOTC cluster state is not ok"; next}' sample.txt

tried the above code

but response not as expected

Code:
lotc cluster
LOTC cluster state is not ok
LOTC cluster state is not ok
LOTC cluster state is not ok
LOTC cluster state is not ok
LOTC cluster state is not ok
LOTC cluster state is not ok

This User Gave Thanks to shanul karim For This Post:
# 4  
You're not too far off for the first part. Try this small adaption of your attempt (and its AMF extension, btw):
Code:
awk '

/cluster state:/        {print $1, $2
                         OK[$1] = 1
                         getline
                         next
                        }

/Node/ && OK["LOTC"]    {if ($3 != "joined")    {print "LOTC cluster state is not ok"
                                                 OK["LOTC"] = 0
                                                }
                        }
OK["AMF"]               {if ("UNLOCKED ENABLED" !~ toupper($NF))        {print "AMF cluster state: is not ok"
                                                                         OK["AMF"] = 0
                                                                        }
                        }
' file
LOTC cluster
LOTC cluster state is not ok
AMF cluster
AMF cluster state: is not ok

This User Gave Thanks to RudiC For This Post:
# 5  
Thanks a lot RudiC

Its working fine except the reverse condition . In case we have all "LOTC cluster state" as joined (without fail status) and AMF cluster state: as all enebled and unlocked status.

Code:
LOTC cluster state:
-------------------
Node safNode=SC_2_1 joined cluster | Wed Dec 5 17:03:36 2018
Node safNode=SC_2_2 joined cluster | Wed Dec 5 17:03:36 2018
Node safNode=PL_2_3 joined cluster | Wed Dec 5 17:04:34 2018

AMF cluster state:
------------------
saAmfNodeAdminState."safAmfNode=SC-1,safAmfCluster=myAmfCluster": Unlocked
saAmfNodeOperState."safAmfNode=SC-1,safAmfCluster=myAmfCluster": Enabled
saAmfNodeAdminState."safAmfNode=SC-2,safAmfCluster=myAmfCluster": locked
saAmfNodeOperState."safAmfNode=SC-1,safAmfCluster=myAmfCluster": Enabled

Here output should be

Code:
LOTC cluster
LOTC cluster state is ok
AMF cluster
AMF cluster state: is ok

instead which is coming as below
Code:
LOTC cluster
AMF cluster
LOTC cluster state is not ok
AMF cluster state: is not ok

--- Post updated at 09:53 AM ---

Dear RuDC,

Changed the code but still need improvement in AMF part.

Code:
$ awk '
>
> /cluster state:/        {print $1, $2
>                          OK[$1] = 1
>                          getline
>                          next
>                         }
>
> /Node/ && OK["LOTC"]    {if ($3 != "joined")    {print "LOTC cluster state is not ok"
>                                                  OK["LOTC"] = 0
>                                                 } else {print "LOTC cluster state is ok"
>                                                  OK["LOTC"] = 0
>                                                 }
>                         }
> OK["AMF"]               {if ("UNLOCKED ENABLED" !~ toupper($NF))        {print "AMF cluster state: is not ok"
>                                                                          OK["AMF"] = 0
>                                                                         } else {print "AMF cluster state is ok"
>                                                  OK["AMF"] = 0
>                                                 }
>                         }
> ' sample.txt
LOTC cluster
LOTC cluster state is ok
AMF cluster
AMF cluster state: is not ok

# 6  
A "reverse condition" was not specified in the original post.



Howsoever, try

Code:
awk '

/cluster state:/        {print $1, $2
                         OK[$1] = 1
                         getline
                         next
                        }

/^Node/ && OK["LOTC"]   {if ($3 != "joined")    {print "LOTC cluster state is not ok"
                                                 OK["LOTC"] = 0
                                                }
                        }
OK["AMF"]               {if (" UNLOCKED ENABLED " !~ " " toupper($NF) " ") {print "AMF cluster state: is not ok"
                                                                            OK["AMF"] = 0
                                                                           }
                        }
END                     {for (o in OK) if (OK[o]) print o, " cluster state is ok"
                        }
' file
LOTC cluster
AMF cluster
LOTC  cluster state is ok
AMF  cluster state is ok


Last edited by RudiC; 02-16-2020 at 01:53 PM..
This User Gave Thanks to RudiC For This Post:
# 7  
I tried but still same result.

Code:
awk '
>
> /cluster state:/        {print $1, $2
>                          OK[$1] = 1
>                          getline
>                          next
>                         }
>
> /^Node/ && OK["LOTC"]   {if ($3 != "joined")    {print "LOTC cluster state is not ok"
>                                                  OK["LOTC"] = 0
>                                                 }
>                         }
> OK["AMF"]               {if ("Unlocked Enabled" !~ toupper($NF))        {print "AMF cluster state: is not ok"
>                                                                          OK["AMF"] = 0
>                                                                         }
>                         }
> END                     {for (o in OK) if (OK[o]) print o, " cluster state is ok"
>                         }
> ' sample.txt
LOTC cluster
AMF cluster
AMF cluster state: is not ok
LOTC  cluster state is ok

Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #297
Difficulty: Easy
Linux Mint can be booted and run from a USB flash drive on any modern computer capable of booting from a USB drive.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Search strings from a file in files in a directory recursively; then print the string with a status

Hi All, I hope somebody would be able to help me. I would need to search a string coming from a file, example file.txt: dog cat goat horse fish For every string, I would need to know if there are any files inside a directory(recursively) that contains the string regardless of case.... (9 Replies)
Discussion started by: kokoro
9 Replies

2. 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

3. Shell Programming and Scripting

Match string from two files and print line

Hi, I have been trying to find help with my issue and I'm thinking awk may be able to do it. I have two files eg file1.txt STRING1 230 400 0.36 STRING2 400 230 -0.13 STRING3 130 349 1 file2.txt CUFFFLINKS 1 1394 93932 . + STRING1 CUFFFLINKS ... (9 Replies)
Discussion started by: zward
9 Replies

4. Shell Programming and Scripting

awk script to match and print

I need a script that will search for a string from column 1 in file A and when the string matches the last column in file B, print columns 1, 2 (file A) and columns 2, 3 (file B). input file A stringtomatch1 a stringtomatch2 a stringtomatch3 b file B junkcolumn1 printcolumn2... (4 Replies)
Discussion started by: ncwxpanther
4 Replies

5. Shell Programming and Scripting

Print string after the word match

Hi, I have the logs : cat logsx.txt 744906,{"reportingGroups":,"version":"2.0"} 678874,{"reportingGroups":,"version":"2.0"} 193571,{"reportingGroups":,"version":"2.0"} 811537,{"reportingGroups":,"version":"2.0"} 772024,{"reportingGroups":,"version":"2.0"}... (5 Replies)
Discussion started by: justbow
5 Replies

6. Shell Programming and Scripting

Print lines that match regex on xth string

Hello, I need an awk command to print only the lines that match regex on xth field from file. For example if I use this command awk -F"|" ' $22 == "20130117090000.*" 'It wont work, I think, because single quotes wont allow the usage of the metacharacter star * . On the other hand I dont know... (2 Replies)
Discussion started by: black_fender
2 Replies

7. Shell Programming and Scripting

How to print everything after a string match

Hi all, I'm trying to do some work on the authorized_keys file to do a check if there's any information after the hash key.. At the end of the hash key's in the file, there can be an = or == Is there a way to check if anything exists after these equals and if so print it out or else print... (2 Replies)
Discussion started by: Jazmania
2 Replies

8. Shell Programming and Scripting

awk to print lines based on string match on another line and condition

Hi folks, I have a text file that I need to parse, and I cant figure it out. The source is a report breaking down softwares from various companies with some basic info about them (see source snippet below). Ultimately what I want is an excel sheet with only Adobe and Microsoft software name and... (5 Replies)
Discussion started by: rowie718
5 Replies

9. Shell Programming and Scripting

exact string match ; search and print match

I am trying to match a pattern exactly in a shell script. I have tried two methods awk '/\<mpath${CURR_MP}\>/{print $1 $2}' multipath perl -ne '/\bmpath${CURR_MP}\b/ and print' /var/tmp/multipath Both these methods require that I use the escape character. I am guessing that is why... (8 Replies)
Discussion started by: bash_in_my_head
8 Replies

10. Shell Programming and Scripting

How to print exit status in AWK

Hi all, How can I print the exit status in AWK? echo $? doesnt work for me Thanks (4 Replies)
Discussion started by: Pauline mugisha
4 Replies

Featured Tech Videos