awk 命令

一、简介

awk是一个报告生成器,我们可以利用awk将文本整理成“表”的样子。

awk其实是一门编程语言,它支持条件判断,数组,循环等功能。

grep,sed,awk被称为linux的三剑客。

grep更适合单纯的查找,文本匹配

sed更适合编辑匹配到的文本

awk更适合格式化文本,对文本进行较复杂格式处理。

 

二、awk基础

awk [options] 'program' file1, file2,...

细分语法:

awk [options] 'pattern{action}' files

1. df |awk '{print $5}' 打印第5列数据

其它说明:$0 显示整行,$NF 最后一列

2. 打印多行 df |awk '{print $1,$5}'

3.添加自定义字段

df |awk '{print $1,"abc"}'

df | awk '{print "abc":$1}'

4. BEGIN END

BEGIN:处理文本之间需要执行的操作

df |awk 'BEGIN {print "aaa","bbb"} {print $1,$2}'

df | awk '{print $1,$2} END{print "aaa","bbb"}'

 

5. 输入分隔符

-F指定分隔符: awk -F# '{print}' a.txt

也可以通过变量的方式指定分隔符, 内置变量FS用于指定分隔符,使用变量时需要使用-v选项:

awk -v FS='#' '{print}' a.txt

6. 输出分隔符

文本输出时指定分隔符的方法,awk的内置变量OFS来设定awk的输出分隔符

awk -v OFS="+++" '{print}' a.txt

 

7. 内置变量

上面我们接触到了一些awk内置变量,现在把常用的几个变量整理如下:

FS:输入字段分隔符

OFS:输出字段分隔符

NF:number of Field 字段数量

NR:行号

FNR:各文件分别计数的行号

FILENAME:当前文件名

8. 自定义变量

-v varname=value

awk -v myvar="test" 'BEGIN{print myvar}'

awk 'BEGIN{myvar="ttt";print myvar}'

 

9. 模式

awk [options] 'Pattern {Action}' file

模式写在{}外面

awk  -F# '$1=="abc"{ print $2}' a.txt

 

正则

awk -F# '/^3/ {print $1}' a.txt

awk  '/he{2,3}/{print $0}' a.txt

找出第一次出现abc的行,到第一次出现123的行之间的所有行

awk '/abc/,/123/{print $0}' a.txt

某列与对应的正则匹配为真

awk '$2~/abc/{print $0}' a.txt

 

10. 条件判断

awk -F ":" '{if($1=="tianrui") print $3}' /etc/passwd

11. 循环

awk -F ":" '{for( i=1;i<6;i++ ){if($1=="tianrui") print $0}}' /etc/passwd

12.数组

统计文档中单词出现的次数

$ cat a.txt

a b a
a
a c a

$ awk '{for( j=1;j<=NF;j++) count[$j]++ } END{ for(i in count){print i,count[i]}}' a.txt

a 5
b 1
c 1

13. 三元运算

$ awk -F: '{userType=$3<500?"系统用户":"普通用户";print $1,userType}' /etc/passw

root 系统用户
bin 系统用户
daemon 系统用户

saslauth 普通用户

posted @ 2019-11-06 11:07  sunshine_5  阅读(329)  评论(0编辑  收藏  举报