using array inside awk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting using array inside awk
# 8  
Old 08-07-2008
Its working fast for me.. thnks...
But i am not getting the values of these arrays outside the awk ...
How i will get this value ?

Thnks in advance
# 9  
Old 08-07-2008
Quote:
Originally Posted by subin_bala
Its working fast for me.. thnks...
But i am not getting the values of these arrays outside the awk ...
[...]
That's why I was asking what is the next task: you can get the values outside,
but I'm sure you can continue with the next task using Awk. Could you describe the next task?
# 10  
Old 08-07-2008
Hi Radoluv,

Thnks for ur valuable replies

My next tasks are

getting the IP and USERAGENT value from the command line argument
call function isInFua ( which is internally calling some othe functions)
FInally i need the Return value (RET_VALUE) like 3G or Smartphone or WAP or WEB...

I am attaching the code with ur changes

#!/bin/sh

IPWeb=( 10.66.24.1 10.66.24.3 10.66.24.4 10.66.24.23 10.66.24.35 10.66.24.34 10.66.24.36 10.66.24.38 10.66.17.151 10.66.17.152 10.66.17.153 10.66.17.
154 10.66.17.155 10.66.17.156 10.66.17.147 10.66.17.148 10.66.17.149 10.66.17.150 )

IPMobile=( 10.163.118.159 10.163.118.160 10.163.118.161 10.163.118.162 10.163.118.163 10.163.118.164 10.163.118.165 10.163.118.166 10.163.118.167 10.163.118.
168 10.163.118.169 10.163.118.170 10.163.118.171 10.163.118.172 10.66.24.40 10.66.24.17 10.66.24.19 10.66.24.37 10.66.17.131 10.66.17.132 10.66.17.133 10.66.
17.134 10.66.17.135 10.66.17.136 10.66.17.137 10.66.17.138 10.66.17.139 10.66.17.144 10.66.17.145 10.66.17.146 )

if [ ! -e $_ficParam ] # e means file exists
then
echo $_ficParam file is misssing
exit
fi

if [ "$_pat" == "" ]
then
_pat=intermediatePattern.txt
fi

if [ ! -e $_pat ] # e means file exists
then
echo "intermediatePattern.txt file is not accessibile"
fi

echo _pat : $_pat
IDX=0
IDX_SP=0


awk 'END {
while (++n <= i)
printf "tg_a, element %d: %s\n", n, THREEG_ARRAY[n]
while (++m <= j)
printf "sp_a, element %d: %s\n", m, SP_ARRAY[m]
}
{
if (/^3G/)
THREEG_ARRAY[++i] = $1
else
SP_ARRAY[++j] = $0
}' $_pat



SIZE_THREEG_ARRAY=`echo ${#THREEG_ARRAY[*]}`
SIZE_SP_ARRAY=`echo ${#SP_ARRAY[*]}`

ALL_ARGS=$* # argument from command line

IP=`echo $ALL_ARGS | awk '{print $1}'` # getting value for IP address
USER_AGENT=$(echo $ALL_ARGS | cut -d'"' -f6) # getting value for USER AGENT

var=0
RET_VALUE=""

function isInFua
{
echo VAR --- $var

isSmartPhone # calling function for Smart phone
if [ $var == 1 ]
then
RET_VALUE=SmartPhone
return
fi

isThreeG # calling function for 3G
if [ $var == 1 ]
then
RET_VALUE=3G
return
fi

isFromWAP # calling function for WAP
if [ $var == 1 ]
then
RET_VALUE=WAP
return
fi

isFromWEB # # calling function for WEB
if [ $var == 1 ]
then
RET_VALUE=WEB
return
fi
}

#------------------------------------------------------------------------------#
# Test 3G and 2.5G on a user-agent functions #
#------------------------------------------------------------------------------#

function isSmartPhone
{
for ((i = 0 ; i < $SIZE_SP_ARRAY ; i++))
do
USER_AGENT_VALUE=`echo $USER_AGENT | grep "${SP_ARRAY[$i]}"`
if [ $? = 0 ]
then
var=1
return
fi
done

}


function isThreeG
{
for ((i = 0 ; i < $SIZE_THREEG_ARRAY ; i++))
do
USER_AGENT_VALUE=`echo $USER_AGENT | grep "${THREEG_ARRAY[$i]}"`
if [ $? = 0 ]
then
var=1
return
fi
done

}

function isFromWAP
{
for ((i = 0 ; i < ${#IPMobile[*]} ; i++))
do
IP_MOBILE_VALUE=`echo $IP | grep "${IPMobile[i]}"`
if [ $? = 0 ]
then
var=1
return
fi
done

}

function isFromWEB
{
for ((i = 0 ; i < ${#IPWeb[*]} ; i++))
do
IP_MOBILE_VALUE=`echo $IP | grep "${IPWeb[i]}"`
if [ $? = 0 ]
then
var=1
return
fi
done

}
isInFua
echo RET_VALUE = $RET_VALUE


Can you please go through with this ??
Thanks for the help...
# 11  
Old 08-07-2008
Could you post a sample invocation of the script (parameters included)?
# 12  
Old 08-07-2008
My script(analyseTrafic.sh) is calling by another script like this

temp="10.48.81.109 - - [18/Jul/2008:15:20:12 +0200] \"GET /cacti/settings.php?tab=general HTTP/1.1\" 200 14457 \"http://10.58.198.153/cacti/settings.php?tab=path\" \"SPV.*E65 Profile/MIDP-2.0 Configuration/CLDC-1.0 UP.Link/6.2.3.15.0\""

./analyseTrafic.sh $temp


The IP Value will be 10.48.81.109 and USER_AGENT is "SPV.*E65 Profile/MIDP-2.0 Configuration/CLDC-1.0 UP.Link/6.2.3.15.0\" inside analyseTrafic.sh
# 13  
Old 08-08-2008
A few suggestions:
I see your're using bash syntax and you're invoking the script as /bin/sh
so I assume you're on Linux and probably you have a recent bash version.
If that's the case, you could use a different approach for the look up:

1. Extract the USER_AGENT from the argument (or the first argument, if you
invoke the script like this: ./analyseTrafic.sh "$temp"):

[assuming GNU grep and recent bash on Linux]

extracting from all arguments:

Code:
USER_AGENT="$(sed -r 's|([^"]*"){4} "([^/ ]+).*|\2|'<<<"$@")"

extracting from the first one:

Code:
USER_AGENT="$(sed -r 's|([^"]*"){4} "([^/ ]+).*|\2|'<<<"$1")"

2. Look it up in the file ("$_pat") with grep:

Code:
_user_agent="$(fgrep "$USER_AGENT" "$_pat")"

And then use the [[ ]] bash operator to test for the 3G string at the beginning.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

sed inside the awk script to replace a string in the array

The requirement is i need to find an array value matching with pattern {5:{ , replace that with 5: and reassign that to same array index and print it. I write something like below and the issue is sed command is not working. If i replace " with "`" the script gives syntax error.how can i... (8 Replies)
Discussion started by: bhagya123
8 Replies

2. UNIX for Dummies Questions & Answers

Array inside sed

Hi guys Let me at first describe the whole thing that I'm trying to do. Lets say I have 100 files like the following one. Ow 1230 16.000000 -0.834000 16.083957 1.751652398 -17.20094528 -4.450623277 Hw 1231 ... (6 Replies)
Discussion started by: saleheen
6 Replies

3. Shell Programming and Scripting

How to use variable inside array?

I tried to use variable inside an array variable, but its not working as expected.:wall: ENV1=123 ENV1=789 ENV1=120 ENV2=567 if then name=ENV1 echo "${name}" echo "${name}" echo "${name}" else name=ENV1 echo "${name}" fi Output: ./val.sh 1 123 (2 Replies)
Discussion started by: Jayavinoth
2 Replies

4. Shell Programming and Scripting

HELP with AWK one-liner. Need to employ an If condition inside AWK to check for array variable ?

Hello experts, I'm stuck with this script for three days now. Here's what i need. I need to split a large delimited (,) file into 2 files based on the value present in the last field. Samp: Something.csv bca,adc,asdf,123,12C bca,adc,asdf,123,13C def,adc,asdf,123,12A I need this split... (6 Replies)
Discussion started by: shell_boy23
6 Replies

5. Shell Programming and Scripting

unique inside array

I have a file root@server # cat /root/list12 11.22.33.44 22.33.44.55 33.44.55.66 33.44.55.66 33.44.55.66 I try to pass to array and display unique. root@server# cat /root/test12.sh #!/bin/bash #delcare array badips and accumulate values to array elemenrs badips=( $( cat... (4 Replies)
Discussion started by: anil510
4 Replies

6. Shell Programming and Scripting

Calling array inside awk

Hello I have the file df.tmp FS is actually the / FS but escape character\ and end of line $ is used in order to fetch exctly / and not other filesystems. awk '/\/$/ {print $(NF-1)+0}' df.tmp will work properly and return a value eg. 60 but when I am trying to issue the command with the array... (3 Replies)
Discussion started by: drbiloukos
3 Replies

7. Shell Programming and Scripting

printing array elements inside AWK

i just want to dump my array and see if it contains the values i am expecting. It should print as follows, ignore=345fht ignore=rthfg56 . . . ignore=49568g Here is the code. Is this even possible to do? please help termReport.pl < $4 | dos2ux | head -2000 | awk ' BEGIN... (0 Replies)
Discussion started by: usustarr
0 Replies

8. Shell Programming and Scripting

split and making an array inside another array

I want to run an awk split on a value that has been pushed through an array and I was wondering what the syntax should be?? e.g. running time strings through an array and trying to examine just minutes: 12:25:30 10:15:13 08:55:23 awk ' NR==FNR{ ... (2 Replies)
Discussion started by: dcfargo
2 Replies

9. UNIX for Advanced & Expert Users

Array inside an array

hi All, I have a array as follows, array1=("xx" "abc" "def" "xyz") and each array1 is also storing some array values, like array1=abc and abc=("a" "b" "c") etcetera etcetra......... Note : each subarray under array1 have index 3 i.e. it can max contain 3 values if i echo ${abc} ... (5 Replies)
Discussion started by: manas_ranjan
5 Replies

10. Shell Programming and Scripting

looping a array inside inside ssh is not working, pls help

set -A arr a1 a2 a3 a4 # START ssh -xq $Server1 -l $Username /usr/bin/ksh <<-EOS integer j=0 for loop in ${arr} do printf "array - ${arr}\n" (( j = j + 1 )) j=`expr j+1` done EOS # END ========= this is not giving me correct output. I... (5 Replies)
Discussion started by: reldb
5 Replies
Login or Register to Ask a Question