Sponsored Content
Top Forums Shell Programming and Scripting Multiple command execution inside awk command during xml parsing Post 302768295 by vivek d r on Friday 8th of February 2013 11:07:28 AM
Old 02-08-2013
Multiple command execution inside awk command during xml parsing

below is the output xml string from some other command and i will be parsing it using awk
Code:
cat /tmp/alerts.xml
 
 <Alert id="10102" name="APP-DS-ds_ha-140018-componentFailure-S" alertDefinitionId="13982" resourceId="11427" ctime="1359453507621" fixed="false" reason="If Event/Log Level(ANY) and matching substring &quot;failed on server&quot;     Log: 10.19.123.197: 0:25:48.04, 1.3.6.1.4.1.1453.4.9.1.3.0.1, The service has failed on this server and caused an HA failover to occur., CLR OCCAS failed on server 10.19.123.197, failure, 2013-01-29,04:58:27.6,--5:0, CLEAR, 10.19.123.197, failure, 2013-01-29,04:58:27.6,--5:0, CLEAR, The service has"/>
.
.
.
etc ect

which i will be parsing using below command

Code:
awk -F'[=|"|<|>|,]' '{for(i=1;i<=NF;i++){
 if($i=="Alert id") {
  if(id!="")
        if(dt!=""){ printf "ID=%d\nNAME=%s\nFIXED=%s\nDATE=%s\nAlDefID=%d\n\n", id,nm,fx,dt,alDFid; }
  id=($i=="Alert id")?$(i+2):id; }
  nm=($i==" name")?$(i+2):nm;
  fx=($i==" fixed")?$(i+2):fx;
  dt=($i~/^ [0-9]+-/)?$i" "$(i+1):dt;
  alDFid=($i==" alertDefinitionId")?$(i+2):alDFid;
 }
}END{
 if(dt!=""){
 printf "ID=%d\nNAME=%s\nFIXED=%s\nDATE=%s\nAlDefID=%d\n\n", id,nm,fx,dt,alDFid;
}
}' /tmp/alerts.xml

output will be as below

Code:
ID=10102
NAME=APP-DS-ds_ha-140018-componentFailure-S
FIXED=false
DATE= 2013-01-29 04:58:27.6
AlDefID=13982
.
.
.etc etc many entries will be there

what i want to achieve is
>in the awk command i want to implement a check for date, first i will parse the date obtained from the query to only date and no time stamp and also system date
Code:
myDate=$( date --date="$DATE"  +%Y%m%d )
sysDate=$( date +%Y%m%d )

and if this date is older than system date then dont print from awk
Code:
if [[ $myDate -eq $sysDate ]] ;then 
   print
else
   skip all
fi

>also i need to perform one more operation
Code:
sh /opt/hqe/hqapi1-client-5.0.0/bin/hqapi.sh  alertdefinition list --id=13982 --host=localhost --port=7443 --user=hqadmin --password=hqadmin --secure=true | grep priority | awk -F'priority=' '{print $2}' | cut -d'"' -f2

whose output will be
Code:
3

PS: i am not good at parsing xml so i did some my own awk and cut to get priority value from xml :-)

the above output is nothing but the priority obtained from that id and display it on console immediately.

--------------
so final output will be

Code:
ID=10102
NAME=APP-DS-ds_ha-140018-componentFailure-S
FIXED=false
DATE= 2013-01-29 04:58:27.6
AlDefID=13982
priority=3.
.
.etc etc many entries will be there

what i want to do is, use this hqapi.sh command inside mail xml parsing AWK command for each iteration and print priority then and there,
i tried using the hqapi command in quotes `` inside awk but it dint work.
any help on this will be deeply appreciated. thanks


PS:also if i succeed in all the above, is there any way i could use echo commands in awk so that i can put check in awk for printing priority in words say 1-lOW,2-MED,3HIGH in colour code using
Code:
echo -e "\e[1;31mHIGH\e[0m"

so the output
Code:
priority=HIGH

---------- Post updated at 09:37 PM ---------- Previous update was at 07:46 PM ----------

so far i implemented below stuff...

Code:
sh /opt/hqe/hqapi1-client-5.0.0/bin/hqapi.sh  alert list --host=localhost --port=7443 --user=hqadmin --password=hqadmin --secure=true >/tmp/alerts.xml
 
awk -F'[=|"|<|>|,]' '{for(i=1;i<=NF;i++){
 if($i=="Alert id") {
  if(id!="")
        if(dt!=""){
cmd="date  +%Y%m%d"
cmd | getline sysDate
print sysDate
close(cmd)
cmd2="date --date=dt  +%Y%m%d"
cmd2 | getline myDate
print myDate
close(cmd2)
cmd3="sh /opt/hqe/hqapi1-client-5.0.0/bin/hqapi.sh  alertdefinition list --id=13671  --host=localhost --port=7443 --user=hqadmin --password=hqadmin --secure=true | grep priority | awk -F'priority=' '{print $2}' | cut -d'"' -f2 "
cmd3 | getline priority
print priority
close(cmd3)
 
 printf "ID=%d\nNAME=%s\nFIXED=%s\nDATE=%s\nAlDefID=%d\n\n", id,nm,fx,dt,alDFid; }
  id=($i=="Alert id")?$(i+2):id; }
  nm=($i==" name")?$(i+2):nm;
  fx=($i==" fixed")?$(i+2):fx;
  dt=($i~/^ [0-9]+-/)?$i" "$(i+1):dt;
  alDFid=($i==" alertDefinitionId")?$(i+2):alDFid;
 }
}END{
 if(dt!=""){
 printf "ID=%d\nNAME=%s\nFIXED=%s\nDATE=%s\nAlDefID=%d\n\n", id,nm,fx,dt,alDFid;
}
}' /tmp/alerts.xml


Additions are :
Code:
cmd="date  +%Y%m%d"
cmd | getline sysDate
print sysDate
close(cmd)
cmd2="date --date=dt  +%Y%m%d"
cmd2 | getline myDate
print myDate
close(cmd2)
cmd3="sh /opt/hqe/hqapi1-client-5.0.0/bin/hqapi.sh  alertdefinition list --id=13671  --host=localhost --port=7443 --user=hqadmin --password=hqadmin --secure=true | grep priority | awk -F'priority=' '{print $2}' | cut -d'"' -f2 "
cmd3 | getline priority
print priority
close(cmd3)

stuck at the place where i need to parse date present in 'dt' variable.. its not considering dt even if i put $ behind it. its throwin error as
Code:
 
date: invalid date `dt'

and for running the script , the cmd3 is not able to process it, its showing as
Code:
awk: cmd. line:14: cmd3="sh /opt/hqe/hqapi1-client-5.0.0/bin/hqapi.sh  alertdefinition list --id=13671  --host=localhost --port=7443 --user=hqadmin --password=hqadmin --secure=true | grep priority | awk -Fpriority= {print
awk: cmd. line:14:      ^ unterminated string


Can anyone help me to proceed further!!!!.. i see no one has replied to this.. the awk command looks complex but its actually simple...

Last edited by vivek d r; 02-08-2013 at 10:31 AM..
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Execution of awk command in a variable

Hi All, I have a awk command that is stored in a variable. the value of the variable cmd is: (mean output of echo $cmd is: ) awk -F";" '{print $1}' Now I want to execute this command. How can I do that???? Quick Reply will be appreciated. Regards, Amit (2 Replies)
Discussion started by: patelamit009
2 Replies

2. Shell Programming and Scripting

Execution problems using awk command.

Hi All, I have the following requirement. In a directory i get files from external source. I at regular intervals check that directory for any incoming files. The file name is underscore delimited. Such as: aaa_bbb_ccc_ddd_eee_fff.dat I am using awk and and splitting the file name. ... (4 Replies)
Discussion started by: satishpv_2002
4 Replies

3. Shell Programming and Scripting

Multiple command execution

I want to open more than 2 files(f1,f2). commands for opening those files are stored in one file (f3). command to execute the file (f3). (3 Replies)
Discussion started by: Mahendravarma
3 Replies

4. Shell Programming and Scripting

Parallel execution of command inside file

Hi all, I have the requirement to generate the file containing following command eval /path/ dsjob -logdetail projectname JOBNAME /path/ 1. The file contains the above command say about 150 times i,e only the JOBNAME changes in every command 2. The commands must be written in such a way... (2 Replies)
Discussion started by: sanjay mn
2 Replies

5. Shell Programming and Scripting

Help in using date command inside awk

Hi All, bash-3.2$ autorep -J BOX_NAME% -l0 | grep BOX_NAME| awk -f awkScript.awk sh: -c: line 0: unexpected EOF while looking for matching `"' sh: -c: line 1: syntax error: unexpected end of file BOX_NAME SU 06/21/2013 03:44:03 06/21/2013 07:46:37 0 #My awkfile { ... (3 Replies)
Discussion started by: ddspark
3 Replies

6. Shell Programming and Scripting

Grep command inside awk

Hi, I would like to use grep command inside awk. Here is my requirement below : file.txt col1 col2 col3 col 4 col 5 wrxwrx 124 jun 3 Sensex.EMEA wrxwrx 120 jun 4 Emex.US wrxwrx 130 feb 3 passion.AUS wrxwrx 145 feb 9 lession.AUS wrxwrx 130 feb 5 pass.US wrxwrx 130 feb 8... (5 Replies)
Discussion started by: Balasankar
5 Replies

7. Shell Programming and Scripting

Execution Problem with awk command

Hi All, I am trying to find a word from a file in loop. while read i; do DB_Name=$i awk '{for(i=1;i<=NF;i++)if($i~/$DB_Name/)print $(i)}' $BTEQ_NAME > $DB_Name_TableList.txt done <Param.txt here Param.txt contents data as ODS_TARGT_RECV FIN_TARGT... (7 Replies)
Discussion started by: Shilpi Gupta
7 Replies

8. Shell Programming and Scripting

Parsing XML using command line

Hi Experts, How do I parse a XML with below contents <saw:user name="mbussey@xyz.com" /> <saw:user name="kimmy.chan@pqr.com" /> <saw:user name="chudgins@gmail.com" /> and retrieve below output ? mbussey@xyz.com kimmy.chan@pqr.com chudgins@gmail.com ... (17 Replies)
Discussion started by: pauldx
17 Replies

9. Shell Programming and Scripting

Parsing OSX UNIX command results which print in multiple lines

from the CLI on a Mac, if you type networksetup -listallnetworkservices then you get results in a multi-line paragraph that look something like this: networksetup -listallnetworkservices An asterisk (*) denotes that a network service is disabled. Wi-Fi Display Ethernet Bluetooth DUN... (7 Replies)
Discussion started by: hungryd
7 Replies

10. UNIX for Advanced & Expert Users

awk trouble inside another command

I tried running this. dsh -w server1 'lsof /audit | awk '{ print $2 }'' It did not like above so I tried to escape the single parenthesis at the end. dsh -w server1 'lsof /audit | awk '{ print $2 }\'' It then hung so I changed up the parenthesis to this. This worked. dsh -w server1... (6 Replies)
Discussion started by: cokedude
6 Replies
All times are GMT -4. The time now is 06:06 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy