Linux学习之awk表达式

echo 'a : 1 : good : g' >> awkexpress.txt
echo 'b : 2 : well : w' >> awkexpress.txt
echo 'c : 3 : food : f' >> awkexpress.txt
echo 'd : 4 : hood : h' >> awkexpress.txt
echo 'e : 5 : bell : b' >> awkexpress.txt
echo 'o : 6 : toll : t' >> awkexpress.txt
echo '1 : a : good : g' >> awkexpress.txt
echo '2 : b : well : s' >> awkexpress.txt
echo '3 : c : food : f' >> awkexpress.txt

把下边的内容:

a : 1 : good : g
b : 2 : well : w
c : 3 : food : f
d : 4 : hood : h
e : 5 : bell : b
o : 6 : toll : t
1 : a : good : g
2 : b : well : s
3 : c : food : f

写入到awkexpress.txt里边。
Linux学习之awk表达式_第1张图片

赋值操作符

=就是awk的赋值操作,变量名 = 变量值就可以给变量赋值。
awk ' { var="string"; print var " # " $0 }' awkexpress.txt就是把string赋值给var变量。
Linux学习之awk表达式_第2张图片

算术操作符

awk中可以使用+-*/%等算术操作符。
awk '{ var = var + 1;print var " # " $0 }' awktest.txt,使用+把变量var0加到9
Linux学习之awk表达式_第3张图片

系统变量

FS:字段分隔符
OFS:输出的字段分隔符
NF:字段数量,NF(Number:数量;Field:字段)
NR:每行的记录号,有多个文件时记录递增。
FNR: 若有多个文件,相互进行隔离,每个文件从1开始重新增长

awk 'BEGIN{ FS=" : " }{ print $3,$4 }' awkexpress.txt使用空格+:+空格作为字段分割符,默认OFS="空格"那么就可以把第3个字段和第4个字段输出到屏幕上。
Linux学习之awk表达式_第4张图片
awk 'BEGIN{ FS=" : " }{ print $3,$4 }' awkexpress.txt就相当于awk 'BEGIN{ FS=" : ";OFS=" " }{ print $3,$4 }' awkexpress.txt
Linux学习之awk表达式_第5张图片
awk 'BEGIN{ FS=" : ";OFS="/#"}{ print $3,$4}' awkexpress.txt,把以空格+:+空格间隔开的第3个字段+“/#”+第4个字段输出到屏幕上。
Linux学习之awk表达式_第6张图片

awk 'BEGIN{ FS=" : " }{ print $3,$4,"/#Field Number:" NF }' awkexpress.txt,其中NF是每个记录中字段个数。
Linux学习之awk表达式_第7张图片

awk 'BEGIN{ FS=" : " }{ print $3,$4,"/#Record Number:" NR }' awkexpress.txt可以看到每行记录号NR
Linux学习之awk表达式_第8张图片

sed 's/g/g : wood/2' awkexpress.txt | awk 'BEGIN{ FS=" : ";OFS="===" }{ print $3,$4,"Field Number:" NF,"Record Number:" NR }'可以看到Record Number为1和7两行中Field Number为5,这是因为sed命令给这两行末尾多加了 : wood
Linux学习之awk表达式_第9张图片

awk 'BEGIN{ FS=" : " }{ print $3,$4,"/#Record Number:" NR }' awkexpress.txt awkexpress.txt,可以看到两个文件是统一从1开始编号,文件没有隔离。
awk 'BEGIN{ FS=" : " }{ print $3,$4,"/#Record Number:" FNR }' awkexpress.txt awkexpress.txt可以看到两个文件相互编号,都是从1开始。

Linux学习之awk表达式_第10张图片

关系操作符

<><=>===!=~(匹配)、!~都是关系运算符。

布尔操作符

&&||!都是布尔操作符。
此文章为8月Day 11学习笔记,内容来源于极客时间《Linux 实战技能 100 讲》。

你可能感兴趣的:(Linux基础学习,linux,学习)