Linux awk 使用_linux



Linux awk 使用_linux_02


Linux awk 使用_linux_03

1awk读入第一行内容

2、判断是否符合模式中的条件NR<3

   如果匹配,则执行对应的动作print NR $1

   如果不匹配,继续读下一行

3、继续读下一行

4、直到读到最后一行


Linux awk 使用_基础_04

   Linux awk 使用_基础_05

Linux awk 使用_基础_06

Linux awk 使用_linux_07

Linux awk 使用_基础_08

默认情况:一行就是一个记录,当然如果修改也行分隔符就不一样了。


内置变量:

Linux awk 使用_基础_09

正则表达式:

Linux awk 使用_基础_10

运算符:

Linux awk 使用_基础_11

Linux awk 使用_linux_12

其实在awk看来,文件从头到尾一段连续的字符串,只是中间有一些\n(回车换行符),RS为了

方便人查看,就把RS值设置为\n,当然可以人为修改,如上图

Linux awk 使用_基础_13

+表示:多个一样的,例如多个空格

Linux awk 使用_基础_14

两种写法


Linux awk 使用_基础_15

这个区别在哪??? 为什么显示不同,大神来解答下。。。


Linux awk 使用_基础_16

当然-F后面[],可加可不加,如果就以一个分隔符的话

 

x重复m             /cool{5}/

x重复至少m    /cool{2,}/

x重复至少m次,但不超过n        /cool{m,n}/

注意:cool加不加括号

/cool{5}/ 表示coo再加上5lcoolllll

/(cool){5}/ 表示cool匹配5个,cool cool cool cool cool

以上必须要加参数--posix或者--re-interval


Linux awk 使用_linux_17

首先以“:”号分隔字段,再查找第一个字段符合字符”o”出现至少一次,不超过2次的,最后

打印行号,第一个字段,最后一次字段。

取反!~

Linux awk 使用_linux_18

1、首先以“:”号,分隔字段,然后同时满足行号=1,且第一个字段中包含的字符”o”出现至少一次,

不超过2次的,打印行号,第一个字段

2、行号1或者行号2,打印第一个字段。

Linux awk 使用_linux_19


Linux awk 使用_linux_20

范围从第1行到第3


Linux awk 使用_基础_21

awk不能直接使用行号作为范围,因为awk具有内置变量NR来记录


范围模式

awk ‘/start pos/,/end pos/ {print $0}’ awk1.txt

awk ‘/start pos/,NR==xxx {print $0}’ awk1.txt


Linux awk 使用_基础_22

这样就只能取第一个条件了

一个开始和一个结束 必须要能确定行

这个=2 <=3 确定不了

所以只按前面的=2取了第二行


Linux awk 使用_linux_23

Linux awk 使用_基础_24


Linux awk 使用_linux_25

Linux awk 使用_linux_26

没有文件,awk依旧可以处理BEGIN模式下的操作块


Linux awk 使用_linux_27

BEGINEND模块后面的语句分隔用;

print的多个参数之间以逗号分隔


Linux awk 使用_基础_28


Linux awk 使用_linux_29

Linux awk 使用_基础_30

统计文件里面的空行


Linux awk 使用_基础_31

b=1就是验证下后面用什么符号,BEGIN,END后面的动作里用分号

 

a=a+1

a++

 

a=a+2

a+=2

 

a+=$0

 

命令赋值 -F

Linux awk 使用_linux_32

Linux awk 使用_基础_33

布尔表达式,为真才执行