RS记录分隔符
当RS=""时,以空白行为记录分隔符,开始和结尾的空白行会被忽略掉,就跟FS为默认值时,行开头和结尾的空白字符被忽略一样
test@server:/tmp> cat -n 1
1
2 a a a
3 b b
4
5
6 d ca
7
8
test@server:/tmp> awk -vRS="" '{print NR,$0}' 1
1 a a a
b b
2 d ca
test@server:/tmp>
下面举例说明在不同RS情况下的真实FS
一.当RS不为默认的\n,且不为空
(1)指定FS,即FS不为默认的空格时,只有指定的FS才为真实的FS,\n不会成为FS
test@server:/tmp> cat 1
a a a #ac
dd
b
d ca
test@server:/tmp>
test@server:/tmp> awk 'BEGIN{RS="b";FS="#"}NR==1{print $1}' 1
a a a
test@server:/tmp> awk 'BEGIN{RS="b";FS="#"}NR==1{print $2}' 1
ac
dd
test@server:/tmp>
(2)不指定FS,即FS为默认的空格时,\n和空格以及\t都会成为FS
test@server:/tmp> cat 1
a a a #ac
dd
b
d ca
test@server:/tmp> awk 'BEGIN{RS="b"}NR==1{print $1}' 1
a
test@server:/tmp> awk 'BEGIN{RS="b"}NR==1{print $2}' 1
a
test@server:/tmp> awk 'BEGIN{RS="b"}NR==1{print $3}' 1
a
test@server:/tmp> awk 'BEGIN{RS="b"}NR==1{print $4}' 1
#ac
test@server:/tmp> awk 'BEGIN{RS="b"}NR==1{print $5}' 1
dd
test@server:/tmp>
二.当RS为空
(1)指定FS,即FS不为默认的空格时,\n和指定的FS会成为真实的FS
test@server:/tmp> cat 1
a a a #ac
dd
b
d ca
test@server:/tmp> awk 'BEGIN{RS="";FS="#"}NR==1{print $1}' 1
a a a
test@server:/tmp> awk 'BEGIN{RS="";FS="#"}NR==1{print $2}' 1
ac
test@server:/tmp> awk 'BEGIN{RS="";FS="#"}NR==1{print $3}' 1
dd
(2)不指定FS,即FS为默认的空格时,\n和空格以及\t都会成为FS
test@server:/tmp> cat 1
a a a #ac
dd
b
d ca
test@server:/tmp> awk 'BEGIN{RS=""}NR==1{print $1}' 1
a
test@server:/tmp> awk 'BEGIN{RS=""}NR==1{print $2}' 1
a
test@server:/tmp> awk 'BEGIN{RS=""}NR==1{print $3}' 1
a
test@server:/tmp> awk 'BEGIN{RS=""}NR==1{print $4}' 1
#ac
test@server:/tmp> awk 'BEGIN{RS=""}NR==1{print $5}' 1
dd
test@server:/tmp>