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

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

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

?
1
2
3
4
[~/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)

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

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

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

ORS指定输出行分隔符

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

RT 代指分隔符

?
1
2
3
4
[~/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)

?
1
2
3
4
5
6
7
8
9
10
11
12
[~/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)

?
1
2
3
4
5
6
7
8
9
10
11
12
[~/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,记录了两个班级的成绩信息,内容分别如下所示:

?
1
2
3
4
5
6
7
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指令;

?
1
2
3
4
5
6
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来实现,如下:

?
1
2
3
4
5
6
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

原文链接:http://blog.csdn.net/cengineering/article/details/78529292

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:linux烧写、配置、搭建Edison环境

2023-3-30 7:13:44

建站知识

小知识:Linux系统利用cp命令实现强制覆盖功能的方法

2023-3-30 7:30:29

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索