第一章 awk

                                                                                                                    第1章 awk

1 awk简介

awk不仅仅时linux系统中的一个命令,而且是一种编程语言,可以用来处理数据和生成报告(excel)。处理的数据可以是一个或多个文件,可以是来自标准输入,也可以通过管道获取标准输入,awk可以在命令行上直接编辑命令进行操作,也可以编写成awk程序来进行更为复杂的运用。

awk指令是由模式,动作,或者模式和动作的组合组成。

  • 正则表达式作为模式
  • 比较表达式作为模式
  • 范围模式
  • 特殊模式BEGIN和END
  • awk默认就支持的元字符
 

功能

示例

解释

^

字符串开头

/^k/或$3~/^k/

匹配所有以k开头的字符串;匹配出所有第三列中以k开头的

$

字符串结尾

/a$或$3~/a$/

匹配所有以a结尾的字符串;匹配第三列中以a结尾的

.(点)

匹配任意但个字符(包括回车符)

/c..l/

匹配字母c,然后两个任意字符,再以l结尾的行

*

重复0个或多个前一个字符

/a*cool/

匹配0个或多个a之后紧跟着cool的行

+

重复前一个字符一次或多次

/a+b/

匹配一个或多个a加上字符串b的行

?

匹配0个或一个前边的字符

/a?b/

匹配以字母a或b或c开头的行

[]

匹配指定字符组内的任一个字符

/^[abc]/

匹配以字母a或b或c开头的行

[^]

匹配不在指定字符组内的任一字符

/^[^abc]/

匹配不以字母a或b或c开头的行

()

子表达式组合

/(nimei)+/

表示一个或多个cool组合,当有一些字符需要组合时,使用括号括起来

|

或者的意思

/(A)|B/

匹配A或字母B的行

awk默认不支持的元字符:(参数--posix)

元字符

功能

示例

解释

x{m}

x字符重复m次

/cool{5}/

匹配cool字符5次

x{m,}

x字符重复至少m次

/(cool){2,}/

匹配cool整体,至少2次

x{m,n}

x字符重复至少m次,但不超过n次

/(cool){5,6}/

匹配cool整体,至少5次,最多6次

  •  

 

awk -F ":" 'NR>=2 && NR<=6{print NR,$1}' 文件

-F:参数-F指定awk按照什么标志进行文件分割,切割成一列一列的,如果不见-F参数,awk默认按照空格进行文件分割。

":":指定“ :”作为分割标志

NR>=2 && NR<=6:这部分表示模式,是一个条件,表示取第2行到第6行

{print NR,$1}:这部分表示动作,表示要输出NR行号和$1第一列。

$0:表示默认全输出。$NF:表示去每行最后一组元素

 

awk -F ":" 'BEGIN{}模式{动作}END{}'

BEGIN{}:开始模式(告诉awk要如何读)  END{}:结束模式(告诉awk要如何结束)

BEGIN有读如换行符和输出换行符:BEGIN{RS="/";ORS="任意符号"}

 

 

问题!1 看文件/etc/passed,把所有的英文单字取出来排序,看那个单词的重复最多,看前十行?

sed -r 's#[^a-zA-Z]# #g' shabi | xargs -n1 | sort | uniq -c | sort -rn | head

s#[]# #g:表示把中括号里的内容替换成空行

[^a-zA-Z]:表示取反

xargs -n1:表示每一行只有一个元素

sort:默认按照26个字母排序。

参数:-n默认按照数字排序

-r 逆转排序

Uniq:相同元素去重

参数:-c  去重复单词时并统计次数

问题!2 :去除网eth0的IP地址?

方法一:hostname -I

方法二:ifconfig eth0 | awk 'BEGIN{RS="[ :]"}NR==31'

方法三 :ifconfig eth0 | awk -F "[ :]+" 'NR==2{print $4}'

问题!3 查看文件一共有多少空行?

方法一 :grep -c "^$" /etc/services 

 方法二 :awk '/^$/{print $0}' /etc/services | wc -l

 方法三 :awk '/^$/{i=i+1;print i}' /etc/services

 方法四 : awk '/^$/{i=i+1}END{print i}' /etc/services

 

 

 

原文地址:https://www.cnblogs.com/yunweizongjian/p/9874595.html