Linux-AWK(应用最广泛的文本处理程序)

目录

一、awk基础

二、awk工作原理

三、OFS输出分隔符

四、awk的格式化输出

五、awk模式pattern


一、awk基础

Linux-AWK(应用最广泛的文本处理程序)_第1张图片

Linux-AWK(应用最广泛的文本处理程序)_第2张图片

 使用案例:

1.准备工作

请在Linux中执行以下指令

cat -n /etc/passwd > ./passwd

 练习:

1.从文件 passwd 中提取并打印出第五行的内容

awk NR==5 passwd 
awk “NR==5” passwd
awk ‘NR==5’ passwd

Linux-AWK(应用最广泛的文本处理程序)_第3张图片

似乎条件可以用单引号和双引号包括起来,也可以不用引号

2.从文件 passwd 中提取并打印出第五行和第六行的内容

awk ‘NR==5,NR==6’ passwd

Linux-AWK(应用最广泛的文本处理程序)_第4张图片

注意:条件中间要用逗号

3.输出passwd文件下所有的行号

awk '{print NR}' passwd 

Linux-AWK(应用最广泛的文本处理程序)_第5张图片

注意:

  1. print是awk最常用动作之一。
  2. 花括号外面必须加单引号或者双引号

4.使用 awk 打印出文件 passwd 的每一行内容。

awk '{print $0,NR}' passwd

Linux-AWK(应用最广泛的文本处理程序)_第6张图片

5.读取 "passwd" 文件的每一行,按照冒号分隔,然后打印出每行的第一个字段(用户名)和最后一个字段。

awk -F “:” ‘{print $1,$NF}’ passwd 

Linux-AWK(应用最广泛的文本处理程序)_第7张图片

这里-F代表分割线,加上":"就是以“:”作为分割,比如root:123456,经过分割后形成两列,root与123456.


二、awk工作原理

一次读取一行文本

输入分隔符进行切片

将每片直接保存在内建的变量中,$1,$2,$3.

Linux-AWK(应用最广泛的文本处理程序)_第8张图片

Linux-AWK(应用最广泛的文本处理程序)_第9张图片


三、OFS输出分隔符

Linux-AWK(应用最广泛的文本处理程序)_第10张图片

当没有使用分隔符的时候

Linux-AWK(应用最广泛的文本处理程序)_第11张图片

当加上分隔符时候,比如逗号

Linux-AWK(应用最广泛的文本处理程序)_第12张图片

 可以看到两列之间空了一段出来,那么换上更容易看到的分隔符呢?

Linux-AWK(应用最广泛的文本处理程序)_第13张图片

指定默认分隔符(通过设置参数OFS实现输出分隔符)

Linux-AWK(应用最广泛的文本处理程序)_第14张图片

上述三个等号改为 \t  会如何?

Linux-AWK(应用最广泛的文本处理程序)_第15张图片


四、awk的格式化输出

请你比较下面不同

        vs        

---使用print

Linux-AWK(应用最广泛的文本处理程序)_第16张图片

 ---使用printf

Linux-AWK(应用最广泛的文本处理程序)_第17张图片

 对比后可以看到区别:

Linux-AWK(应用最广泛的文本处理程序)_第18张图片

以下练习awk的格式化输出

1.打印整行内容作为一个字符串输出。

Linux-AWK(应用最广泛的文本处理程序)_第19张图片

2.打印整行内容作为一个字符串输出。但是加上换行

Linux-AWK(应用最广泛的文本处理程序)_第20张图片

 3.打印一段字符串并设置分隔符

Linux-AWK(应用最广泛的文本处理程序)_第21张图片


五、awk模式pattern

Linux-AWK(应用最广泛的文本处理程序)_第22张图片

最前面关键字awk,最后面是文件,中间是  参数  引号,引号中是  条件+动作

案例1:使用pattern中的BEGIN使得只输出china而忽略后面的文件

Linux-AWK(应用最广泛的文本处理程序)_第23张图片

案例2:使用BEGIN  与一般文本下的执行顺序

Linux-AWK(应用最广泛的文本处理程序)_第24张图片

BEGIN后面的花括号内容优先处理,BEGIN后的动作完成后再处理后面的

 案例3:使用BEGIN 一般文本 END下的执行顺序

 总结一下

先BEGIN,中文本,后END

Linux-AWK(应用最广泛的文本处理程序)_第25张图片


你可能感兴趣的:(Linux常用命令,linux)