19,613
社区成员
发帖
与我相关
我的任务
分享
awk ‘{if($0~/^$/)print NR}’ file
这句很简单,$0表示整行,~是正则表达式专用的运算符,/^$/是正则表达式匹配空行,NR是内建变量,表示行号(Number of Record) cat file | sed -e ' s/http:\/\///' -e ' s/\/.*//' | sort | uniq -c | sort -rn
两个sed分别是去掉首尾,sort是排序,因为之后uniq的输入必须是排好序的,uniq的选项-c就是加前缀表示出来的次数 ,
最后再sort一下,-rn两个选项,r是reverse表示从大到小,n是numeric表示按数值排序而不是ASCII码awk 'BEGIN{FS="/"}{arr[$3]++}END{for(i in arr) print arr[i] " " i}' testfile
testfile中存放测试内容。
命令解释:分为三段,
1. awk命令名
2.单引号来的awk命令内容,也可以通过-f选项从外部文件中读入
3.要处理的内容文件,本例中名字为testfile
通过man awk可以获取awk命令的用法
GAWK(1) Utility Commands GAWK(1)
NAME
gawk - pattern scanning and processing language
SYNOPSIS
gawk [ POSIX or GNU style options ] -f program-file [ -- ] file ...
gawk [ POSIX or GNU style options ] [ -- ] program-text file ...
pgawk [ POSIX or GNU style options ] -f program-file [ -- ] file ...
pgawk [ POSIX or GNU style options ] [ -- ] program-text file ...
dgawk [ POSIX or GNU style options ] -f program-file [ -- ] file ...
awk语法的语法,分为三段,BEGIN{}, {}, END{}
其中BEGIN{}与END{}是可选中,中间的正文是必须的中,中间的正文用来循环处理每一行。
在本例中,在BEGIN中设置了FS,field seperator即每一项的分隔为斜杠,
在正文中变量$3,是第3项,即域名,arr为新建的变量,类似于c++中的std::map类型,key为域名,value为计数。
在END中打印出arr