终端shell使用-instance_learning
awk
1 | (base) [iprobe@node118 202311]$ cat access1-20231116.log.* | grep "tj=" | awk '{if($6~"tj=" )print $0}' | awk '{print $6" "$(NF-2)}' | awk -F "\"" '{print $1$2}' | awk 'BEGIN{sum=0 ;count=0} {sum +=$2; count++;} END {print " sum="sum" count="count " avg="sum/count}' sum=3312.68 count=59274 avg=0.0558875 |
另一条命令:
-
cat access1-20231116.log.*
: 查看以access1-20231116.log.
开头的所有文件。 -
grep "tj="
: 过滤出包含 “tj=” 的行。 -
awk '{if($6~"tj=" )print $0}'
: 如果第 6 列包含 “tj=”,则输出整行数据。 -
awk '{print $6" "$(NF-2)}'
: 提取第 6 列和倒数第二列,并打印在一起。 -
awk -F "\"" '{print $1$2}'
: 去掉双引号。 -
awk 'BEGIN{sum=0 ;count=0} {sum +=$2; count++;} END {print " sum="sum" count="count " avg="sum/count}'
: 对第二列数据进行求和、计数和平均值操作,最后输出结果。
以上命令的意义是查找符合条件的行,提取第 6 列和倒数第二列的数据,去掉双引号,对第二列数据进行统计分析,并输出结果。
1 | less test.log |grep "GET http /api/algo/allocation?"|awk ' |
sort
1 | less stdout |grep "search" |awk -F '/' '{print $3 $4}' |awk -F '?' '{print $1}' |sort -k 1|uniq -c |sort -nk 1 |
这是一个Linux命令行管道,用于对标准输出进行过滤、提取和排序。下面是每个命令的解释:
less stdout
: 将标准输出传递给less
命令,以便以分页方式查看内容。grep "search"
: 在输入中搜索包含"search"关键字的行。awk -F '/' '{print $3 $4}'
: 使用"/"作为字段分隔符,提取第三个和第四个字段,并将它们打印出来。awk -F '?' '{print $1}'
: 使用"?"作为字段分隔符,提取第一个字段,并将其打印出来。sort -k 1
: 以第一个字段为键进行排序。uniq -c
: 统计相邻的重复行,并显示每个行重复出现的次数。sort -nk 1
: 按照第一个字段的数值排序(以数字方式进行排序)。
请注意,这只是一个示例命令,具体的使用场景和输入数据可能需要进行调整。less stdout |grep “search” |awk -F ‘/’ ‘{print $3 $4}’ |awk -F ‘?’ ‘{print $1}’ |sort -k 1|uniq -c |sort -nk 1
sed
1 | 不加参数i就只看到结果,没写入a.txt文件 |
grep
1 | cat access1-20240320.log.wapp* | grep "GET /tj_sy_access.htm?" | grep -v "list=2" |grep -oP '(?<=proId=)[^&]+' |sed 's/%2C/,/g' | tr ',' '\n' |grep -Fwf ../AdProduct |wc -l |
逐步解释每个部分的作用:
-
cat access1-20240320.log.wapp*
:这个命令使用cat
命令将所有以access1-20240320.log.wapp
开头的文件内容连接起来。 -
grep "GET /tj_sy_access.htm?"
:这个命令使用grep
命令过滤出包含GET /tj_sy_access.htm?
的行,即匹配特定URL的访问记录。 -
grep -v "list=2"
:这个命令使用grep
命令过滤掉包含list=2
的行,即排除特定参数的访问记录。 -
grep -oP '(?<=proId=)[^&]+'
:这个命令使用grep
命令和正则表达式,提取出proId
参数的值。(?<=proId=)
是一个正则表达式的lookbehind断言,用于匹配proId=
前面的内容,[^&]+
表示匹配一个或多个非&
字符。
这里的-o
参数表示只输出匹配到的内容,-P
参数表示使用Perl兼容的正则表达式。 -
sed 's/%2C/,/g'
:这个命令使用sed
命令将%2C
替换为逗号,
,因为%2C
是URL编码中的逗号。 -
tr ',' '\n'
:这个命令使用tr
命令将逗号,
替换为换行符\n
,以便每个proId
值占一行。 -
grep -Fwf ../AdProduct
:这个命令使用grep
命令从文件../AdProduct
中匹配proId
值。-F
表示按照固定字符串进行匹配,-w
表示匹配整个单词,-f
表示从文件中读取模式。
通俗来讲,就是从../AdProduct
文件中匹配proId
值,如果匹配成功,则输出该行。 -
wc -l
:这个命令使用wc
命令统计匹配到的行数,即特定proId
值的访问次数。
总结起来,这个命令的作用是统计日志文件中特定URL的访问次数,其中排除了特定参数的访问记录,并且只统计匹配到的proId
值在../AdProduct
文件中存在的次数。