三剑客之awk、grep

awk

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片(把每一行的各个列分开,单独处理),切开的部分再进行各种分析处理。

语法:

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

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

参数说明:

-F fs or --field-separator fs 指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,

如-F:。

-v var=value or --asign var=value 赋值一个用户定义变量。

-f scripfile or --file scriptfile 从脚本文件中读取awk命令。

变量:

NF: number filed 当前行分割后的字段个数。打印的时候,是取出最后一列

NR: number row 表示当前第几行

函数:

toupper():字符转为大写。

tolower():字符转为小写。

length():返回字符串⻓度。

substr():返回子字符串。

sin():正弦。

cos():余弦。

sqrt():平方根。

rand():随机数。

BEGIN语句/END语句

awk 'BEGIN{ commands } pattern{ commands } END{ commands }'

BEGIN语句块 在awk开始从输入流中读取行 之前 被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。

END语句块 在awk从输入流中读取完所有的行 之后 即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。

pattern语句块 中的通用命令是最重要的部分,它也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块。

BEGIN {
    math = 0    
    english = 0    
    computer = 0   
 printf "NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL\n"   
 printf "---------------------------------------------\n"
}
#运行中
{    
    math+=$3    
    english+=$4    
    computer+=$5    
    printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3+$4+$5
}
#运行后END
{    
    printf "---------------------------------------------\n"    
    printf "  TOTAL:%10d %8d %8d \n", math, english, computer    
    printf "AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR
}

结果:

grep

能使用正则表达式搜索文本,并把匹配的行打印出来。

命令的基本格式:

grep [option] pattern file

 对于这个命令我们经常使用的一个场景如下:

ps -ef|grep xxxx

grep 常用的参数:

-A<行数 x>:除了显示符合范本样式的那一列之外,并显示该行之后的 x 行内容。

-B<行数 x>:除了显示符合样式的那一行之外,并显示该行之前的 x 行内容。

-C<行数 x>:除了显示符合样式的那一行之外,并显示该行之前后的 x 行内容。

-c:统计匹配的行数

-e :实现多个选项间的逻辑or 关系

-E:扩展的正则表达式-f 文件名:从文件获取 PATTERN 匹配

-F :相当于fgrep-i --ignore-case #忽略字符大小写的差别。

-n:显示匹配的行号-o:仅显示匹配到的字符串

-q: 静默模式,不输出任何信息

-s:不显示错误信息。

-v:显示不被 pattern 匹配到的行,相当于[^] 反向匹配

-w :匹配 整个单词

grep egrep fgrep对比

grep可以使用基本正则表达式进行内容查找匹配

egrep可以使用扩展的正则表达式进行内容查找匹配

fgrep只能查找固定内容,无法使用正则进行匹配

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值