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 代表分隔符

你可能感兴趣的:(awk 分隔符把你整迷糊了吧)