AWK记录与字段
在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的值也可以改变。