linux 中统计文本某指定字符串出现次数并排序

https://www.runoob.com/linux/linux-comm-awk.html

https://www.cnblogs.com/wangbaihan/p/9262296.html

https://blog.csdn.net/qq_28766327/article/details/78069989

 

先上语句,后面说明https://www.cnblogs.com/wangbaihan/p/9262296.html这个下面的例子,写的很好,简单明了

cat check_info.log.2017-09-20 | awk -F '(txt=|&client)' '{print $2}' 
-F 指定分隔符,这里是正则,用”txt=" 或“&client”为分隔符,取出第二项

例子:
sdate=2017-09-20 23:59:32&txt=com.ford.fordmobile&client_id=x
被分割为
sdate=2017-09-20 23:59:32&
com.ford.fordmobile
_id=x
第二部分“com.ford.fordmobile”为需要的


cat check_info.log.2017-09-20 | awk -F '(txt=|&client)' '{print $2}'| sort | uniq -c | sort -nr > testfile
先排序sort
在去重统计unip:每行重复出现的次数
再次按照 -n 数值大小 -r 反向排序
> testfile 输出到文件

 

命令介绍:

cat

显示整个文件:cat fileName

创建一个文件:cat >fileName

合并文件:cat file1 file2 > file

参数

-n 或 -number 由1开始对all输出行数进行编号

-b or -number-nonblank 编号略过空白行,空白行不进行编号

-s or -squeeze-blank 将连续的空白行浓缩为一行

|管道

将左边命令的输出作为右边命令的输入

awk行处理器

https://www.cnblogs.com/ftl1012/p/9250541.html

文件或字符串中基于指定规则浏览、抽取信息

处理庞大文件不会内存溢出,处理较快,用于格式化文本,依次对每行文件进行处理然后输出

语法

awk [选项参数] 'script' var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)

选项参数

-F fs --field-separator 指定文件分割符,fs 一个字符串或正则 -F: 
-mf nn and -mr nn对nn值限制,mf分配最大块数目 mr记录最大目录,标准awk不适用 
-v var =value or --asign var=value自定义变量赋值 
-f scripfile or --file scriptfile脚本文件中读取awk命令 
-W compact or --compat,-W traditional or --traditional兼容模式下运行awk,all的awk扩展被忽略 
-W copyleft or --copyleft ,-W copyright or --copyright 打印简短的版权信息 
-W help or --help,-W usage or --usage打印全部awk选项和每个选项的简短说明 
-W lint or --lint 打印不能像传统unix平台移植的结构的警告 

基本用法

我感觉直接看菜鸟教程就好,又全排版还好

awk '{[pattern] action}' {filenames}   # 行匹配语句 awk '' 只能用单引号

内建变量

 

  1. awk  '{print $1,$4}' log.txt 每行按空格或tab分割,输出文本中的第1、4项,0标识全部
  2. awk -F '[ ,]' '{print $1,$2}' log.txt 多个分隔符,先使用空格分割,再使用“,"f分割,取第1、2项
  3. awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt,自定义变量a, $1+a等价于$2,  $1b:第一项+s
  4. awk '$2 ~ /th/ {print $2,$4}' log.tx 输出第二列包含 "th",并打印第二列与第四列

  5. awk '$2 !~ /th/ {print $2,$4}' log.txt取反
  6. awk '/root/' /etc/passwd 使用pattern匹配’root'(pattern)的行才会执行,无action默认输出每行内容
  7. awk -F: '/root/ {print $7}' /etc/passwd 搜索/etc/passwd有root关键字all行并输出
  8. awk -F ":"  '{if(NR<31 && NR >12) print $1}' /etc/passwd取第12到31行的第一列信息
统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容
awk  -F ':'  '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd

or

awk -F: '{printf ("filename:%10s, linenumber:%3s,column:%3s,content:%3f\n",FILENAME,NR,NF,$0)}' /etc/passwd

image

还有常用的运算符,加减乘除、详情请移步https://www.runoob.com/linux/linux-comm-awk.html例子如下

awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt 过滤第一列大于2且第二列等于Are行第1、2、3项
awk -F\' 'BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";printf "---------------------------------------------\n"} {printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}'  log.txt
FILENAME ARGC  FNR   FS   NF   NR  OFS  ORS   RS
---------------------------------------------
log.txt    2    1    '    1    1
log.txt    2    2    '    1    2
log.txt    2    3    '    2    3
log.txt    2    4    '    1    4

begin放的是执行前的语句;end处理完all行后要执行的语句
https://www.runoob.com/linux/linux-comm-awk.html

sort

文件的每行作为一个单位,互相比较:从首字符向后依次按ascii码进行比较,默认升序

-b 忽略每行前开始的空格  -c检查文件是否已经按顺序排序

-d 排序时,处理英文字母、数字、空格外忽略其他字符

-f排序时小写视为大写字母     -i 排序时除040至176间ASCII字符外,忽略其他字符

-m 将几个排序号的文件合并    -M将前3个字母依照月份缩写排序

-n依照数字大小排序                -o<输出文件> 排序后结果存入指定文件

-r 相反顺序排序                       -t<分割字符> 执行排序用的分隔符

uniq 

报告或忽略文件中重复行,一般与sort命令结合使用

 -c或--count每列旁边显示该行重复出现的次数

 -d 或-repeated 仅显示重复出现的行列

 -f <栏位>或-skip-fields=<栏位> 忽略比较指定的栏位

 -s<字符位置>或-skip-chars=<字符位置>忽略比较指定的字符

 -u或--unique仅显示一次的行列

 -w<字符位置>或-check-chars=<字符位置> 指定要比较的字符

>

定向输出到文件,如果文件不存在创建,存在清空

>> 追加到目标文件

 

cat check_info.log.2017-09-20 | awk -F '(txt=|&client)' '{print $2}' 
-F 指定分隔符,这里是正则,用”txt=" 或“&client”为分隔符,取出第二项

例子:
sdate=2017-09-20 23:59:32&txt=com.ford.fordmobile&client_id=x
被分割为
sdate=2017-09-20 23:59:32&
com.ford.fordmobile
_id=x
第二部分“com.ford.fordmobile”为需要的


cat check_info.log.2017-09-20 | awk -F '(txt=|&client)' '{print $2}'| sort | uniq -c | sort -nr > testfile
先排序sort
在去重统计unip:每行重复出现的次数
再次按照 -n 数值大小 -r 反向排序
> testfile 输出到文件

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值