LINUX中详解AWK内建变量FS,NF,NR,RT,RS,ORS,OFS

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/

看了网上好多关于AWK内建变量的文章,这里加上个人的理解和记忆,可以让大家掌握这些变量的基本用法。

FS 指定字段un列分隔符(Font Space)

[~/AWK_learning]$ echo “111|222|333” | awk {print $1} 111|222|333 [~/AWK_learning]$ echo “111|222|333″ | awk BEGIN{FS=”|”}{print $1} 111

OFS 指定输出字段列分隔符(Output Font space)

[~/AWK_learning]$ echo “111 222 333″ |awk BEGIN{OFS=”|”;}{print $1,$2,$3} 111|222|333

RS指定行分隔符 默认分隔符为n(Row Space)

[~/AWK_learning]$ echo “111 222|333 444|555 666″ | awk BEGIN{RS=”|”}{print $0} 111 222 333 444 555 666

ORS指定输出行分隔符

[~/AWK_learning]$ awk BEGIN{ORS=”|”;}{print $0;} test.txt 111 222|333 444|555 666

RT 代指分隔符

[~/AWK_learning]$ echo “111 222|333 444|555 666″ | awk BEGIN{RS=”|”}{print $0,RT} 111 222 | 333 444 | 555 666 |

NF 每行字段总数(Number of Font)

[~/AWK_learning]$ cat test.txt 111 222 333 444 555 666 [~/AWK_learning]$ awk {print NF} test.txt 2 2 2 [~/AWK_learning]$ awk {print $NF} test.txt 222 444 666

NR 当前行数(Number of Row)

[~/AWK_learning]$ cat test.txt 111 222 333 444 555 666 777 [~/AWK_learning]$ awk {print NR} test.txt 1 2 3 [~/AWK_learning]$ awk {print $NR} test.txt 111 444 777

下面我们在来看下,在内建变量执行中的相关问题:

NR表示从awk开始执行后,按照记录分隔符读取的数据次数,默认的记录分隔符为换行符,因此默认的就是读取的数据行数,NR可以理解为Number of Record的缩写。

在awk处理多个输入文件的时候,在处理完第一个文件后,NR并不会从1开始,而是继续累加,因此就出现了FNR,每当处理一个新文件的时候,FNR就从1开始计数,FNR可以理解为File Number of Record。

  NF表示目前的记录被分割的字段的数目,NF可以理解为Number of Field。

下面以示例程序来进行说明,首先准备两个输入文件class1和class2,记录了两个班级的成绩信息,内容分别如下所示:

CodingAnts@ubuntu:~/awk$ cat class1 zhaoyun 85 87 guanyu 87 88 liubei 90 86 CodingAnts@ubuntu:~/awk$ cat class2 caocao 92 87 90 guojia 99 96 92

现在要查看两个班级的所有成绩信息,并在每条信息前加上行号,则可以使用下面的awk指令;

CodingAnts@ubuntu:~/awk$ awk {print NR,$0} class1 class2 1 zhaoyun 85 87 2 guanyu 87 88 3 liubei 90 86 4 caocao 92 87 90 5 guojia 99 96 92

这里的行号就是通过NR来实现的,awk每读取一条记录,NR的值便加一。如果要求每个班级的行号从头开始变化,则需要使用FNR来实现,如下:

CodingAnts@ubuntu:~/awk$ awk {print FNR,$0} class1 class2 1 zhaoyun 85 87 2 guanyu 87 88 3 liubei 90 86 1 caocao 92 87 90 2 guojia 99 96 92
免费资源网 – https://freexyz.cn/


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容