1. awk 脚本从标准输入端(键盘输入或管道) 或者命令行指定的文件中读取. 可以指定多个文件.当前文件名在内建变量FILENAME中. 每次读取和处理一个记录(record). 每个记录分成若干个字段. 缺省情况下, 每个记录就是一行文件. RS变量指定划分记录的字符. 缺省RS为换行符-'\n'. 可以指定其他字符用于划分记录. gawk 甚至允许指定一个字符串, 或者正则表达来作为RS.
a) RS 可以在脚本程序中修改, 比如BEGIN, 示例如: awk ' BEGIN {RS="/"} BBS-list
b) 在awk的命令行中指定 如 awk ' {print $0}' RS="/" BBS-list
c) RS="" 表示用一个或者多个空行可以分割符
2. 每个记录被awk分割成若干个字段, 分隔符用FS表示, 缺省FS为空白, 包括一个或者多个空格, tab, 换行符
a) FS 跟 RS一样可以被awk脚本赋予新的值
b) NF表示当前记录的字段个数, $0表示整个记录, $1~$NF分别表示第1到NF字段
3 获取某个字段N的值可以使用$N, 其中N并不要求是常数, 可以是变量或者表达式, awk来负责转换. 但是要注意 N 不能为负数. 像$NF, $(2*2)等都是可以的.
4 awk允许修改记录的内容, 但改变只局限于awk脚本内部, 输入文件并不会被修改.
a) 可以修改$N的值, OFS表示当前记录的分隔符. 对某个字段的修改, $0也会作出相应的修改.
b) 对某个字符重新赋值, 可以重建$0, 如
echo a b c d | awk { OFS=":"; $1=$1;print $0 }'
a:b:c:d
如果不给$1重新赋值, $0的输出并不会因为OFS的修改可重建, 故输出还是 a b c d
c) echo a b c d | awk ' { OFS=":";$5=$1$2$3$4;print $0 }'
输出: a:b:c:d:abcd
5 指定FS的方式:
a) awk 的 -F 选项 awk F, '{print $1}' inputfile 指定逗号为分隔符
b) 在脚本中给FS 赋值 如 awk ' BEGIN { FS="," };{print $1}' inputfile
c) 在命令行中给FS赋值, 如 awk ' {print $1}' FS="," inputfile
6. 多行记录
有些记录太长, 一行写不下, 可以使用多行. 这个时候, 缺省的分隔符不能使用了. 可以考虑使用特殊字符,比如"\f", 或者使用RS="". 多个空行作为分隔符.
而FS则为"\n"