awk and fuction (recursion) !! Urgent !!

Hey all,
:smiley:
Could you please check following way of writing awk is correct or not ???



Its recursion being called.

tempgrep.txt has :
462948
1311040
880922

tempfind.txt has :
t2589vg 880922 462948 09:57:07 -ksh
mqsiadm 1298856 1311040 09:57:56 -ksh
mqsiadm 1311040 880922 09:57:19 -ksh

Please suggust/correct the script(if wrong) !!
Thanks
Varun:b:

awk does not know about pattern:
awk -v pattern=$pattern"

Use the -v option. Plus pattern is misspelled as "pettern".

Please use code tags when you post code.

hey,

Thanks for reply :slight_smile:

Could you please tell me where i should mention -v option in awk, as awk is used twice in the code ? Now, how my script should look like ?
Thanks, I did notice the typo error for pattern. Thanks anyways.
And when i was running the above script then it given me error saying:Syntax error at line 11 : `(' is not expected.

Please tell me.:b:

---------------------------------------------------------

I AM GETTING ERROR :
AccessLogMonitorAdv_script[32]: 0403-057 Syntax error at line 57 : `(' is not expected.

THEN NAME OF MY SCRIPT IS AccessLogMonitorAdv_script
PLEASE SUGGEST SOLUTION TO THIS !!
THANKS
Varun.


  1. ↩︎

  2. 0-9 ↩︎

Hey,
Unix Gurus...Could you all please give me the solution to this script?:b:

Hey,

I have a dummy script that is the base for the above script where I am getting the problem of syntax.
Dummy script is working fine and is given below, but i dont know why the actual script is not working :

-------------------------------------------------------------------
for var in 1 2
do

echo "var : $var"

count=0
while [ "$count" -lt 3 ]
do
echo "count : $count"

    awk 'BEGIN      \{ i = 0
                    f\(i\)
                    \}
      function f\(para\)
            \{
                    if \( para < 10 \)
                    \{
                    print "\\n value of para : " para ;
                    para \+= 1 ;
                    f\(para\) ;
                    \}
                    else
                    \{
                    print "\\n inside else, before increment, para : " para ;
                    para \+= 1 ;
                    print "\\n inside else, para : " para ;
                    exit ;
                    \}
            \}
  '
    let "count \+= 1"

done
done

-------------------------------------------------------------------

Please have a look and suggest any solution to the problem.
Thanks to all the unix bonds.

Varun Gupta.:b:

Please provide some suggestion on this !!

----------------------------------------------------------------------------

Have a look to the Syntax of the script and its giving error inside the function "fun" while redirecting the output to the file. ">>"

PLEASE FIND THE CODE ..

SCRIPT TO CHECK WHO HAS ACCESSED THE LOG/FILE IN PAST 'N' MINUTES, AND MAIL ACCORDINGLY.

MYPATH="/clocal/mqbrkrs/user/mqsiadm/varun/"
MAIL_RECIPIENTS="vg@dc.com"
#

Subject=":: LOGS BEING TOUCHED IN THE LAST FEW MINUTES ::"
>tempmail.txt
>tempfind.txt
>filterfile.txt
>tempgrep.txt
#*******************************************************************
## List all the files which one accessed since last 1 min #####
#*******************************************************************

index=1
pidprev=0

ps -ef | grep "\-ksh" | awk '$8 !~ /grep/ { printf "%s %s %s %s %s\n", $1, $2, $3, $5, $8 ; }' >> ./tempfind.txt

for file_dir in `find $MYPATH -amin -1`
do

        echo `fuser -uf "$file_dir" ` >> temp.txt.$$
        echo " $file_dir is  being accessed" >> temp.txt.$$
done

sed -n '/^[ ][a-z]*/p' temp.txt.$$ >> tempmail.txt
echo "Accessed By: " >>tempmail.txt
sed -n '/^[0-9]/p' temp.txt.$$ > filterfile.txt

echo "BEFORE FOR LOOP"
for pid_var in `awk '{ print $1 }' filterfile.txt`
do
                echo "**here i am inside the for loop** ";

                if [ "$index" -eq 1 ] ; then
                        echo "**inside if 1. ** " ;
                        pidprev="$pid_var" ;
                        echo "pid_var: $pid_var" ;
                        echo "pidprav: $pidprev" ;

                        `awk '$2 ~ pid_var {print $3 > "tempgrep.txt" }' tempfind.txt` ;

                        echo "1. " ;
                        cat tempgrep.txt ;
                        echo "----" ;

                        cat tempgrep.txt | \
                        while read ppid
                        do
                                        echo "**inside while loop 1.**"
                                        `awk 'function fun( n, pattern )
                                               {
                                                `awk '{ if($2~n && $1~pattern){
                                                                n=$3;
                                                                fun( n, pattern ); }
                                                        else{
                                                                if($2~n && $1!~pattern){
                                                                        print $1 >> "tempmail.txt" ;
                                                                        break ;
                                                                        }
                                                                else {next ;}
                                                            }
                                                        }' tempfind.txt`
                                               }

                                              BEGIN{ pattern = "mqsi[admtsprd]" }
                                              {if ( ppid !~ "" ) { fun( ppid, pattern ); }}

                                         '`
                        done

                        let "index+=1"  ;
                fi


                if [ "$pid_var" -ne "$pidprev" ] ; then
                        echo "**inside if 2. ** " ;
                        pidprev="$pid_var" ;
                        echo "pid_var: $pid_var" ;
                        echo "pidprav: $pidprev" ;
                       `awk '$2 ~ pid_var {print $3 > "tempgrep.txt" }' tempfind.txt` ;

                        echo "2. ";
                        cat tempgrep.txt ;
                        echo "----" ;

                        cat tempgrep.txt | \
                        while read ppid
                        do
                                echo "***inside while loop 2. ***"
                                        `awk 'function fun( n, pattern )
                                               {
                                                `awk '{ if($2~n && $1~pattern){
                                                                n=$3;
                                                                fun( n, pattern ); }
                                                        else{
                                                                if($2~n && $1!~pattern){
                                                                        print $1 >> "tempmail.txt" ;
                                                                        break ;
                                                                        }
                                                                else {next ;}
                                                            }
                                                        }' tempfind.txt`
                                               }

                                              BEGIN{ pattern = "mqsi[admtsprd]" }
                                              {if ( ppid !~ "" ) { fun( ppid, pattern ); }}

                                         '`
                        done
                fi

done

cat tempmail.txt | mailx -s "$Subject" "$MAIL_RECIPIENTS"

rm -f "temp.txt.*" 2> /dev/null
# >tempmail.txt
# >tempfind.txt
# >filterfile.txt
# >tempgrep.txt

Do let me know the suggestions !!
Thanks
Varun.:b:

You can't nest backticks like that. However, there's an alternate syntax which works.

var=$(echo outer and $(echo inner) backticks, oh my)

You would be more likely to get useful replies if you pared down the question to just the specific problem you have, rather than post an enormous script.

Hey,
Thanks for suggestions.
Can you tell me how to resolve that backticks in my code ?
As per my code, i am using awk, and how to resolve that nested feature ?
Please let me know, appreciate all your help.

Varun.

Hint: I wrote "there is an alternative syntax which works". Try it.

Hey Varun,

Did you got what you wanted or still looking for the solution..

Hey,

Hope i'll give you good news soon, as far as this script is concerned !! :slight_smile:

Thanks for being active and joining the forum for this issue.
:b: