📄 awk最新教程.txt
字号:
第三章 模式(pattern)
在一条“模式-动作”语句中,模式是一个表达式,用来确定执行相关操作的那些记录(行)。也就是在awk处理数据时,只有数据行与模式相匹配,程序中相对应的动作才会被执行。
3.1 BEGIN和END
BEGIN和END是两个特殊的模式。
BEGIN的作用是在处理第一条记录之前将BEGIN后面大括号之内的动作运行且只运行一次,也就是BEGIN匹配第一个输入记录之前。
END的作用是在处理完最后一条记录之后将END后面大括号之内的动作运行且只运行一次,也就是说,END匹配最后一个输入记录之后。
如:
awk ‘BEGIN { print “my program begin !”;i=0 } { i=i+$1 print $1 } END { print “total :”,i }’ file0
3.2 用表达式(Expression)作为模式
一个awk模式可以是一个表达式,用这个表达式来测试两个数字或字串的诸如大于、等于、小于等关系。
awk有六个关系操作符和两个匹配符:
x<=y 如果 x 小于、等于 y,则结果为真。 x>y 如果 x 大于 y,则结果为真。
x>=y 如果 x 大于、等于 y,则结果为真。
x==y 如果 x 等于 y,则结果为真。
x!=y 如果 x 不等于 y,则结果为真。
x~y 如果 x 符合 regular expression y,则结果为真。
x!~y 如果 x 不符合 regular expression y,则结果为真。
上面所提到的 x 与 y,如果二者皆是数字则视为数字之间的比较,否则它们会被转换成字符串且以字符串的形式做比较。两个字符串的比较,会先比较第一个字符,然后比较第二个字符,依此类推,直到有不同的地方出现为止。如果两个字符串在较短的一个结束之前是相等,则视为长的字符串比短的字符串大。例如 "10" 比 "9" 小,"abc" 比 "abcd" 小。
例:awk ‘$1>5{ print $0 }’ file0
其结果是把文件file0中第一个字段大于5的所有行打印出来。
3.3 用正则表达式(Regular Expressions)作为模式
awk还提供了比前面介绍的功能更强的字符串查找模式。这些模式称做正则表达式,最简单的正则表达式是用两个顺斜杠“/”把字符串括起来,例如:/Asia/ 一个regular expression (正则表达式)可简写为 regexp,当输入记录含有regexp时就视为符合。如上例中的/Asia/,对于任何输入记录,若含有'Asia'则视为符合。
例如:awk '/Asia/ { print $2 }' earth,结果将把文件earth中所有含'Asia'的行的第二个字段打印出来,而不论'Asia'这个字符串在一行中的哪一部分。
通常,为了将一个匹配限制在一个特定的域上,可以使用匹配操作符~(匹配)和!~(不匹配)。
如:awk '$2 ~ /Asia/ { print $0 }' file0
将把文件file0中第二个字段是字符串Asia的行全部打印出来。
而:awk '$2 !~ /Asia/ { print $0 }' file0
将把文件file0中第二个字段不是字符串Asia的行全部打印出来。
在正则表达式中,符号 \ ^ $ . [ ] * ? ( ) 是元字符,这些元字符象UNIX Shell中的元字符一样有特殊的含义。
例如,元字符“^”和“$”分别匹配字符串的开始和结束,而元字符“.”匹配任意单个字符。如 /^.$/ 将匹配所有只包含一个字符的输入行。由括号括起来的一组字符,表示匹配其中的任何一个字符。如/[ABC]/与那些无论在什么地方包含A,B,C中任一字符的记录相匹配。多个字符或数字可以在括号内采用缩写形式:/[a-z]/,它与所有纯小写字母字符串相匹配。 /^[0-9]+$/匹配所有以数字开头的字符串。在元字符的前面加上一个“\”,就可以关闭元字符的特殊含义。这样,/b\$/匹配所有包含b$这两个字符的行。
3.4 模式组合
一个组合的模式是由较简单的模式加上圆括号和逻辑操作符&&与,||或,!非来构成的。
例如:
awk '$1==“Asia” && $3>500 { print $0 }’earth
将文件earth中所有第一个字段为Asia,且第三个字段大于500的行打印出来。
awk '$1==”Asia”||$1==“Africa” { print $0 }’earth
awk '$1~/^(Asia|Africa)$/ { print $0 }’earth
以上两句都是将文件earth中所有第一个字段为Asia或者为Africa的行打印出来。
awk '$1!=“Asia” && $1~/^[As]/ { print $0 }’earth
将文件earth中所有第一个字段包含As但不为Asia的行打印出来。
非操作符!的优先级最高,其次是&&,最后是||。操作符&&和||从左到右判断它们的操作数,当得到真或假值时,这种判断即停止。
第四章 动作(action)
4.1.1 输入
awk所处理的数据可以从指定的文件中读取或者接收某些命令的执行结果,再或者可以直接从标准输入设备上输入。
1)从文件中输入格式为: awk ‘{ action }’ filename1 filename2 ...
执行时,awk将依次从filename1 filename2 ...文件中读取数据并执行action操作.
如: awk ‘{ print $1 }’ file1
从文件file1中读取数据,并将打印每行的第一个字段
2)从其它命令输入格式为: Unix命令| awk ’{ action }’
执行时,awk将接收Unix命令的输出,并对输出执行action操作.
如: who | awk ‘{ print $2 }’
如果who命令结果为: root ttyp0 Jul 6 14:19,则上面awk语句的执行结果为:ttyp0
3)从标准输入设备上输入在命令行上输入awk ’{ action }’并回车后,awk语句便处于等待状态,此时可以输入一条记录,当打回车确认后,awk语句将对这一行进行处理。如果符合处理的条件,awk就会将处理结果显示到屏幕上。接着,再次进入等待输入的状态。如此循环下去,一直到打Ctrl-d退出或被del键中断。
4) 读入awk以外的Shell变量
有时需要将awk以外的变量读入到awk之中,通常有两种方法:
a. 直接引用外部变量aa="字符串" awk ' { print "'$aa'" }'如果变量aa的值是一个汉字字符串,则在SCO Unix3.0上运行将显示不出来,在5.0上没有问题。
b. 间接引用外部变量aa="string" awk '{ print bb }' bb=$aa
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -