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
=
就是awk
的赋值操作,变量名 = 变量值
就可以给变量赋值。
awk ' { var="string"; print var " # " $0 }' awkexpress.txt
就是把string
赋值给var
变量。
在awk
中可以使用+
、-
、*
、/
和%
等算术操作符。
awk '{ var = var + 1;print var " # " $0 }' awktest.txt
,使用+
把变量var
从0
加到9
。
FS:字段分隔符
OFS:输出的字段分隔符
NF:字段数量,NF(Number:数量;Field:字段)
NR:每行的记录号,有多个文件时记录递增。
FNR: 若有多个文件,相互进行隔离,每个文件从1开始重新增长
awk 'BEGIN{ FS=" : " }{ print $3,$4 }' awkexpress.txt
使用空格
+:
+空格
作为字段分割符,默认OFS="空格"
那么就可以把第3个字段和第4个字段输出到屏幕上。
awk 'BEGIN{ FS=" : " }{ print $3,$4 }' awkexpress.txt
就相当于awk 'BEGIN{ FS=" : ";OFS=" " }{ print $3,$4 }' awkexpress.txt
。
awk 'BEGIN{ FS=" : ";OFS="/#"}{ print $3,$4}' awkexpress.txt
,把以空格
+:
+空格
间隔开的第3个字段+“/#”+第4个字段
输出到屏幕上。
awk 'BEGIN{ FS=" : " }{ print $3,$4,"/#Field Number:" NF }' awkexpress.txt
,其中NF
是每个记录中字段个数。
awk 'BEGIN{ FS=" : " }{ print $3,$4,"/#Record Number:" NR }' awkexpress.txt
可以看到每行记录号NR
。
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
。
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开始。
<
、>
、<=
、>=
、==
、!=
、~
(匹配)、!~
都是关系运算符。
&&
、||
、!
都是布尔操作符。
此文章为8月Day 11学习笔记,内容来源于极客时间《Linux 实战技能 100 讲》。