![](https://csdnimg.cn/release/download_crawler_static/10136678/bg3.jpg)
Tom Jones 4424 5/12/66 543354
Mary Adams 5346 11/4/63 28765
Sally Chang 1654 7/22/54 650000
Billy Black 1683 9/23/44 336500
long@long-Ubuntu:~$ cat awkfile
/^Mary/ {print "Hello Mary!"}
{print $1, $2, $3}
long@long-Ubuntu:~$ awk -f awkfile employees
Tom Jones 4424
Hello Mary!
Mary Adams 5346
Sally Chang 1654
6.记录与字段
在 awk 看来,输入数据具有格式和结构。默认情况下,每一行称为一条记录,以换行符结束。
默认情况下,输入和输出记录的分隔符(行分隔符)都是回车符(换行符),分别保存在 awk 的内置变量 ORS 和 RS
中,其值可以修改,只能以特定方式进行修改。
每条记录的记录号都保存在 awk 的内置变量 NR 中,每处理完一条记录,NR 的值加 1。
每条记录由字段(field)组成,用空白符(空格或制表符)分隔。内置变量 NF 保存记录的字符数。前面提到的
FS,用来分隔字段,并且删除各字段前多余的空白或制表符。可以在 BEGIN 语句中或命令行上赋值来改变 FS 的值。也可以在
命令行上通过-F 选项来改变 FS 的值。
例 4:
long@long-Ubuntu:~$ cat employees2
Tom Jones:4424:5/12/66:543354
Mary Adams:5346:11/4/63:28765
Sally Chang:1654:7/22/54:650000
Billy Black:1683:9/23/44:336500
long@long-Ubuntu:~$ awk -F: '/Tom Jones/{print $1,$2}' employees2
Tom Jones 4424
也可以使用多个字段分隔符。此时 FS 对应的是一个正则表达式字符串,被括在方括号中。
例 5:
long@long-Ubuntu:~$ awk -F'[ :\t]' '{print $1,$2}' employees
Tom Jones
Mary Adams
Sally Chang
Billy Black
long@long-Ubuntu:~$ awk -F'[ :\t]' '{print $1,$2}' employees2
Tom Jones
Mary Adams
Sally Chang
Billy Black
前面提到的输出字段分隔符 OFS,输出时如果没有用逗号来分隔字段,结果中字段将堆在一起。OFS 的值也可以改变。
7.模式与操作
模式由正则表达式、判别条件真伪的表达式或者二者的组合构成。awk 默认打印所有是表达式结果为真的文本行。模