文本三剑客之 awk

awk

Linux/UNIX 系统中,awk 是一个功能强大的编辑工具。逐行读取输入文本

以空格作为分割符,多个空格他会自动压缩成一个空格

AWK信息的读入也是逐行指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理.

1按照命令找指定的行  2.找到的行 打印,操作

awk 默认的方式就是打印  把结果给你输出到屏幕上

可以在无交互 的情况下实现相当复杂的文本操作,被广泛应用于 Shell 脚本,完成各种自动化配置任务。

命令结构

awk ‘< pattern>    #只能那个用单引号引起来

          操作符      怎么干     处理对象  

awk 的工作过程

1先看BEGIN{action)这个模块是读取操作,读文件的所有行,所有读取完毕,然后一次执行

2.END{bction)打印。输出结果,对前面的结果,条件判断,还可以用代码接着操作

awk的工作流程就是对行进行处理  然后区列

文本三剑客之 awk_第1张图片

 工作原理

sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理

目录

awk的基本格式及其内置变量

awk 选项 '模式或条件 {操作}' 文件1 文件2.

-F  :|     加上指定分隔符

-v  变量赋值

注意一定是单引号:'模式或条件 {操作}

{ }外指定条件,{ }内指定操作。

内置变量

不能用双引号括起来,不然系统会把它当成字符串

内置变量

$0 当前处理的行的整行内容  打印所有

$n

当前处理行的第n个字段(第n列)
NR 当前处理的行的行号(序数)

NF

当前处理的行的字段个数。$NF代表最后一个字段
FS 列分割符。指定每行文本的字段分隔符,输入内容的分隔符,

命令行操作

这是aed ' '  打印的方式

文本三剑客之 awk_第2张图片

这是awk ‘{print}’  打应的方式 

 文本三剑客之 awk_第3张图片

 awk ‘1{peint}’ 2.txt  这两个是一个意思    加1和不加一

awk '{peint}' 2.txt

文本三剑客之 awk_第4张图片

 $0 是全部打印

awk '{print $0}' 2.txt

文本三剑客之 awk_第5张图片

先看这张图就好理解了  对没行的列进行处理  也就是切片

 文本三剑客之 awk_第6张图片

$0 是打印所有内容 后面加上2 3 4 就是打印他的列数

文本三剑客之 awk_第7张图片

实战演练对 /etc/passwd 提取第1列和第4列

文本三剑客之 awk_第8张图片

既有行号也有内容

awk '{print NE,$0}' /etc/passwd

 文本三剑客之 awk_第9张图片

awk 'NR==3{print}'  3.txt    指定打印出第三行的内容

 文本三剑客之 awk_第10张图片

 awk 'NR==3,NR==5{print}' test1.txt  ----打印3-5行的内容文本三剑客之 awk_第11张图片

这边要主要下冒号 逗号不要搞混 了

awk 'NR==3,NR==5{print}' 3.txt  ----打印3 4 5行的内容

awk 'NR==3;NR==5{print}' 3.txt  ----打印第3行和第5行

文本三剑客之 awk_第12张图片

awk '(NR>=3)&&(NR<=5){print}' test1.txt -----正则的表达方式,打印3-5行的内容

文本三剑客之 awk_第13张图片

奇偶行打印

awk 'NR%2==0{print}' test1.txt #打印偶数行

 awk 'NR%2==1{print}' test1.txt #打印奇数行

文本三剑客之 awk_第14张图片

 awk运算:

文本三剑客之 awk_第15张图片

 getline

 getline的工作过程

1、当getline左右无重定向符号(“<”,">")或者管道符号(“|”)时,

打印偶数行

awk '{getline;print $0}' test1.txt #相当于打印了偶数行

 文本三剑客之 awk_第16张图片

 getline作用

getline没有重定向  没有管道符就是打印奇偶行 

awk '{print $0;getline}' test1.txt #相当于打印了奇数行文本三剑客之 awk_第17张图片

2、当getline左右有管道符号或重定向符时 

作用:就是从指定文件获取内容>输出到新的文件里  $0代表全量  也就是全部的意思

 awk '{getline < "1.txt"; print $0 > "ky30.txt";}' 3.txt #使用重定向把1.txt输出给ky30

文本三剑客之 awk_第18张图片

 第一个:getline是awk的一个内置函数

 第二个:没有重定向和管道符,就是奇偶行

第三个: 重定向,就从指定文件获取内容,|,赋值变量

文件内容匹配过滤打印

文本三剑客之 awk_第19张图片

你可能感兴趣的:(linux,unix,服务器)