- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图理解这个 gawk 命令中的一些 JavaScript:
gawk 'function getip(rec) {
n=split(rec,a,"\"");
split(a[n-1],ip,",");
return ip[1]
}
$10 ~ /302/ && $6 ~ /POST/ && $7 ~ /^\/sso\/[pl]fe\/(rs|ui)\/login/ {
lfe_user_ip=getip($0);
user_path[lfe_user_ip]=user_path[lfe_user_ip]"_login-302"
}
/\/sso\/pfe\/rs\/profile\/customer/ && $6 ~ /PUT/ {
pfe_user_ip=getip($0);
if (user_path[pfe_user_ip] ~ /_login-302/) {
if ($10 ~ /200/) successful_redirect_conversion+=1;
else failed_redirect_conversion+=1;
}
} END {
print successful_redirect_conversion, failed_redirect_conversion
}'
用于分析的日志行在上面的 awk 上可以如下所示:
[09/Oct/2017:02:21:39 -0400] 10.222.11.23 10.222.11.23 - GET /sso/lfe/ui/login http-bio-8000-exec-27 5000 200 49929 24 ?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= "unauthenticated" "10.222.11.23, 10.222.11.23,10.222.11.23"
对 javascript 中的 split 方法和 user_path 变量感到困惑
最佳答案
i'm trying to understand some javascript in this gawk command:
这个脚本中没有javascript,它是纯粹的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.23
Field-4 => $4 => 10.222.11.23
Field-5 => $5 => -
Field-6 => $6 => GET
Field-7 => $7 => /sso/lfe/ui/login
Field-8 => $8 => http-bio-8000-exec-27
Field-9 => $9 => 5000
Field-10 => $10 => 200
Field-11 => $11 => 49929
Field-12 => $12 => 24
Field-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"
关于gawk 命令中的 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46682805/
如何在 gawk 中将一个数字指定为二进制数? 根据manual , gawk 将所有数字解释为十进制,除非它们前面有 0(八进制)或 0x(十六进制)。与某些其他语言不同,0b 无法解决问题。 例如
我使用以下 #! 为 gawk 创建可执行脚本: #!/usr/bin/gawk -f 但是,如果我想启用间隔正则表达式,我似乎无法添加 --re-interval或-W re-interval在#!
我在带有 cygwin 的 Windows 计算机上使用 gawk。 我想要做的是从三列中找到最小值和最大值,两列是纬度和经度,第三列是值。 这是代码: echo off for /f "tok
我在使用 gawk 时遇到错误。下面是我的脚本和示例文件 你们能帮帮我吗?我认为正则表达式是对的,但是当它传递给匹配函数时出现错误。我尝试了各种方法,例如将\赋予正则表达式或 double 的特殊字符
我有一些文本需要拆分以提取相关参数,而我的 [g]awk match 命令不起作用 - 我只是想了解为什么?! (我现在已经写了一个不太优雅的方法......)。 所以字符串是 blahblah|ms
我试图理解这个 gawk 命令中的一些 JavaScript: gawk 'function getip(rec) { n=split(rec,a,"\""); split(a[n-1
好的,我有一些文本: === Blah 1 === ::Junk I wish: 2 Ignore ::More Junk: 1.2-2.7 ::ABC: [http://www.google.c
我正在尝试用一组行替换包含使用 gawk 的模式的行。比方说,文件 aa 包含 aaaa ccxyzcc aaaa ddxyzdd 我正在使用 gawk 将所有包含 xyz 的行替换为一组行 111\
我有下面的脚本来从 | 中删除换行符定界文件。此命令在本地主机中运行良好。但是在 linux 服务器上运行时给出空白输出 gawk -v RS="[^|]+([|][^|]+){2}\n" '{ gs
我在我的程序中使用的简单 gawk 过滤器没有过滤掉比其余部分长一个数字的值。 这是我的文本文件: 172 East Fourth Street Toronto 4 1890
我有一个已经用 gawk 编写的程序,它可以从互联网上下载很多小的信息。 (媒体扫描仪和索引器) 目前它启动wget来获取信息。这很好,但我想简单地重用调用之间的连接。该程序的一次运行可能会对同一 a
我正在编写一个 awk 脚本,它接受文本文件中的一些输入列并打印出每列中的最大值 输入: $cat numbers 10 20 30.3 40.5 20
很抱歉关于正则表达式的第 n 个简单问题,但如果没有在我看来太复杂的解决方案,我无法得到我需要的东西。我正在解析一个只包含 3 个字母 A、E、D 序列的文件,如 AADDEEDDAEEEEEEEEA
我需要使用正则表达式来解析数据文件的特定行。我的匹配测试命令有效,我的特定行号测试命令有效,但是当我将它们放在一起时,我没有输出。 gawk 'NR==42 {print $0}' filename
更新 这是一个错误,修复程序在 git repo 中可用现在。 我无法理解 FS 中的抑扬符被解释。 例如,这是我的 file : $ cat file foo bar baz quz 我写了这个 a
如果字段分隔符为空字符串,则每个字符成为一个单独的字段 $ echo hello | awk -F '' -v OFS=, '{$1 = NF OFS $1} 1' 5,h,e,l,l,o 但是,如果
我希望 gawk 使用逗号 , 作为小数点字符来解析数字。所以我将 LC_NUMERIC 设置为 fr_FR.utf-8 但它不起作用: echo 123,2 | LC_NUMERIC=fr_FR.u
我正在尝试转置一个非常长的文件,但我担心它不会完全转置。 我的数据看起来像这样: Thisisalongstring12345678 1 AB abc 937 4.320194 Thisis
我正在扫描格式如下的日志文件: 76.69.120.244 - - [09/Jun/2015:17:13:18 -0700] "GET /file.jpg HTTP/1.1" 200 22977 "h
我有大量文件(大约 500 个)。每个文件包含两列。每个文件的第一列都是相同的。我想使用 gawk 将所有文件合并到一个文件中。 例如, File 1 a 123 b 221 c 904 Fil
我是一名优秀的程序员,十分优秀!