awk 分隔符把你整迷糊了吧
awk的分隔符还是有点不太明白,接下来好好看看这些分隔符在awk中的使用,总结一下关于RS,ORS,FS,OFS的使用
1.关于RS,ORS,FS,OFS的简单介绍
RS:记录分隔符
ORS:输出当前记录分隔符
FS:字段分隔符
OFS:输出字段分隔符
一片文章共包含很多段落,在每个段落中包含多条记录行,每一个记录行中包含多个字段.
字段---(构成)---->记录行----(组成)---->段落---(拼成)---->文章
2.关于RS和ORS的相关测试
1)RS--->记录分隔符,默认分隔符是\n
实例A(默认记录分隔符):
echo -e "111 wz\n222 wyc\n333 xz\n444 zz" | awk 'BEGIN{RS="\n"}{print $0}'
echo -e "111 wz\n222 wyc\n333 xz\n444 zz" | awk '{print $0}'
实例B(自定义记录分隔符):
echo -e "111 wz#222 wyc#333 xz#444 zz" | awk 'BEGIN{RS="#"}{print $0}'
记录行以"#"为分隔符,使用RS="#"可以将记录行分开.
实例C(RS使用正则表达式):
echo -e "111a222a333a444" | awk 'BEGIN{RS="[a-z]+"}{print $0}'
记录行以字母为分隔符.使用正则表达式匹配出来.
2)ORS记录输出分隔符.默认是\n
实例A(默认是分隔符是\n):
head -3 passwd | awk 'BEGIN{ORS="\n"}{print $0}'
head -3 passwd | awk '{print $0}'
实例B(记录行分隔符变成#):
head -3 passwd | awk 'BEGIN{ORS="#"}{print $0}'
3.FS和OFS的相关认识
1)FS字段分隔符,默认是空格(一个或者多个空格)
实例A(默认分隔符是一个或者多个空格):
字段之间有多个空格awk 'BEGIN{FS="[[:space:]]+"}{print $0}' test
awk '{print $0}' test
2)OFS总段输出分隔符:
实例A(输出字段以|分隔):
awk -F: 'BEGIN{OFS="|"}NR==1{print $1,$2}' passwd
如果将字段都显示出来:
awk -F: 'BEGIN{OFS="|"}NR==1{NF=NF;print $0}' passwd
注意黑体使用的是分好.
1.NR 行号
2.NF 列号 $NF 代表最后一行
3.RT 代表分隔符