Skip to content Skip to sidebar Skip to footer

Javascript In Gawk Command

i'm trying to understand some javascript in this gawk command: gawk 'function getip(rec) { n=split(rec,a,'\''); split(a[n-1],ip,','); return ip[1] } $10 ~ /302/ &

Solution 1:

i'm trying to understand some javascript in this gawk command:

There is no javascript, in this script, its pure awk

gawk '                              # call gawk, by default awk default field separator is single space.
function getip(rec) {

    # rec -> string# a -> array# "\"" -> separator# split string rec into pieces, where separator being quote # and store in array a,# varibale n will hold count of it, # meaning how many elements (in array a) it became after splitting

    n=split(rec,a,"\""); 

    # a[n-1] -> second last element of an array# ip -> array# , -> being separator# like above it will split string by comma

    split(a[n-1],ip,",");

    # return first element of an array ip
    return ip[1]
} 

# if 10th field/column contains 302 and# 6th contains POST and # 7th field starts with regex /sso/[pl]fe/rs|ui/login/# it can be # /sso/pfe/rs/login or /sso/lfe/rs/login# /sso/pfe/ui/login or /sso/lfe/ui/login

$10 ~ /302/ && $6 ~ /POST/ && $7 ~ /^\/sso\/[pl]fe\/(rs|ui)\/login/ {

    # variable lfe_user will have contents returned by getip function# $0 -> current row/record/line 

    lfe_user_ip=getip($0);

    # user_path -> array# lfe_user_ip -> array key/index# user_path[lfe_user_ip]"_login-302" -> previous content of such key# and new string  "_login-302" will be saved in array# infact concatenation with existing values of array

    user_path[lfe_user_ip]=user_path[lfe_user_ip]"_login-302"
}  

# if line contains regex# /sso/pre/rs/profile/customer and# 6th field contains string PUT       

/\/sso\/pfe\/rs\/profile\/customer/ && $6 ~ /PUT/ {

    # variable pre_user_ip will have contents returned by function

    pfe_user_ip=getip($0); 

    # if array user_path value, with index being content of pfe_user_ip# contains with /_login-302/

    if (user_path[pfe_user_ip] ~ /_login-302/) {

        # if 10th field contains 200# increment variable successful_redirect_conversion by 1# else increment variable failed_redirect_conversion by 1

        if ($10 ~ /200/) successful_redirect_conversion+=1; 
        else failed_redirect_conversion+=1;
    } 
} END {
    # after reading everything# print variables
    print successful_redirect_conversion, failed_redirect_conversion
}' 

From your file contents, here is how awk split line into fields, with default FS, single space.

Field-1    => $1 => [09/Oct/2017:02:21:39
Field-2    => $2 => -0400]
Field-3    => $3 => 10.222.11.23Field-4    => $4 => 10.222.11.23Field-5    => $5 => -
Field-6    => $6 => GET
Field-7    => $7 => /sso/lfe/ui/login
Field-8    => $8 => http-bio-8000-exec-27Field-9    => $9 => 5000Field-10   => $10 => 200Field-11   => $11 => 49929Field-12   => $12 => 24Field-13   => $13 => ?templateId=https%253A%2F%2Fwww.cargive.ca%2Fservice%2FpostLoginProcessing.a%3Fredirect%3Ddefault%26rememberMe%3D1&sourceUrl=https%3A//www.cargive.ca/service/postLoginProcessing.a?redirect=default&rememberMe=1&authlvl=
Field-14   => $14 => "unauthenticated"Field-15   => $15 => "10.222.11.23,
Field-16   => $16 => 10.222.11.23,10.222.11.23"

Post a Comment for "Javascript In Gawk Command"