awk是一个优良的文本处理工具,能过滤文本内容,和grep类似,可以进行列操作,还可以使用正则,正则需用/正则/
awk文本处理工具的基本用法
用法一:前置命令 | awk [选项] ‘[条件]{指令}’
用法二:awk [选项] ‘[条件]{指令}’ 文件 //条件多为/正则/
选项: -F:指定使用特定的分隔符,如未指定,则使用默认的分隔符空格和TAB
例:awk '{print $1}' a //使用默认分隔符后输出第一列
awk -F, '{print $1}' a //使用,为分隔符,输出第一列

awk -F[/,] '{print $1,$2}' a //同时使用/和,作为分隔符,输出第一和第二列

内置变量:$1,$2…. //第一列,第二列
NR //当前行的行号
NF //当前行有多少列
例:awk '{print NR,NF}' a

常量:常量需要用""给引起来
例:awk '{print "这是第"NR"行","一共有"NF"列"}' a

awk高级用法
awk 'BEGIN{} {} END{}' 文件
BEGIN{}:在读文件之前就先执行这部分
{}:读取文件时执行这部分条件
END{}:文件读取完成后再执行这部分
例:awk 'BEGIN{count=0} /bash$/{count++} END{print count}' /etc/passwd //定义count=0,以bash结尾的行count则加1,最后输出count的值

例:在/root/passwd文件中打印出如下形式
用户名 家目录 PID
xxx xxx xxx
xxx xxx xxx
xxx xxx xxx
总用户量:xxx
awk -F: 'BEGIN{count=0;print "用户名","家目录","PID"} {count++;print $1,$6,$3} END{print "总用户量:",count}' /root/passwd | column -t //column -t 是排版

~匹配用法:
例:awk -F: '$1~/root/' /etc/passwd //匹配第一列中是root的输出行
awk -F: '$7!~/nologin/' /etc/passwd //匹配第7列不是nologin的行输出
数值字符串设置条件
== != >= <= > < && ||
例:awk -F: '$1=="root"' /etc/passwd //精准匹配第一列是root的行
例:awk -F: '$3>1000||$3<10{print $1}' /etc/passwd //输出PID大于1000或者小于10的用户名
数组用法:
例:awk 'BEGIN{a[0]=11;a[1]=22;for (i in a) {print i,a[i]}}' //定义数组a,遍历数组,输出

未经允许不得转载:天府数据港官方信息博客 » awk的简单使用
客官点个赞呗! (0)