awk NR与FNR

2024-03-17 10:58
文章标签 awk nr fnr

本文主要是介绍awk NR与FNR,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 http://hi.baidu.com/drvial/blog/item/cf2bb2381322e92996ddd8cf.html

书上说:

NR,表示awk开始执行程序后所读取的数据行数.

FNR,与NR功用类似,不同的是awk每打开一个新文件,FNR便从0重新累计.

下面看两个例子:

1,对于单个文件NR 和FNR 的 输出结果一样的 :

# awk '{print NR,$0}' file1
1 a b c d
2 a b d c
3 a c b d

#awk '{print FNR,$0}' file1
1 a b c d
2 a b d c
3 a c b d

2,但是对于多个文件 :

# awk '{print NR,$0}' file1 file2
1 a b c d
2 a b d c
3 a c b d
4 aa bb cc dd
5 aa bb dd cc
6 aa cc bb dd

# awk '{print FNR,$0}' file1 file2
1 a b c d
2 a b d c
3 a c b d
1 aa bb cc dd
2 aa bb dd cc
3 aa cc bb dd

在看一个例子关于NR和FNR的典型应用:

现在有两个文件格式如下:

#cat account
张三
|000001
李四
|000002
#cat cdr
000001|10
000001|20
000002|30
000002|15

想要得到的结果是将用户名,帐号和金额在同一行打印出来,如下:

张三|000001|10
张三
|000001|20
李四
|000002|30
李四|000002|15

执行如下代码

#awk -F /| 'NR==FNR{a[$2]=$0;next}{print a[$1]"|"$2}' account cdr

注释:

NR=FNR为真时,判断当前读入的是第一个文件account,然后使用{a[$2]=$0;next}循环将account文件的每行记录都存入数组a,并使用$2第2个字段作为下标引用.

由NR=FNR为假时,判断当前读入了第二个文件cdr,然后跳过{a[$2]=$0;next},对第二个文件cdr的每一行都无条件执行{print a[$1]"|"$2},此时变量$1为第二个文件的第一个字段,与读入第一个文件时,采用第一个文件第二个字段$2为数组下标相同.因此可以在此使用a[$1]引用数组。

这篇关于awk NR与FNR的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/818746

相关文章

awk_常用参数汇总

awk 是一个强大的文本处理工具,其中特殊变量用于管理和操作文本。以下是对你提到的变量的详细解释和示例: NR:当前处理的行号。NF:当前行的字段数。FS:输入字段的分隔符。OFS:输出字段的分隔符。FNR:每个文件中独立计数的行号。RS:输入记录的分隔符。ORS:输出记录的分隔符。 NR(Number of Records) NR 表示当前处理的记录数(行号),它从1开始,处理

sed和awk编辑器

目录 一、sed编辑器 1. 概述 2. sed 流编辑器的工作过程 3. sed命令格式 3.1 基本操作格式 3.2 执行多条命令的格式 4. sed命令的选项操作符 4.1 常用选项 4.2 sed命令的操作符 5. 常用操作的语法演示 5.1 输出符合条件的文本 5.2 删除符合条件的文本 5.3 替换符合条件的文本 5.4 插入新行 6. sed总结  二

sed awk 第二版学习(三)—— 编写 sed 脚本

目录 一、在脚本中应用命令 二、寻址上的全局透明 三、测试并保存输出 1. 用于测试 sed 的 shell 脚本 testsed 2. sed 永久性改动的 shell 脚本 runsed 四、sed 脚本的四种典型应用 1. 对同一文件的多重编辑 2. 改变一组文件 3. 提取文件内容 (1)提取宏定义脚本 getmac (2)生成提纲的脚本 do.outline 4.

6 - Shell编程之sed与awk编辑器

目录 一、sed 1.概述 2.sed命令格式 3.常用操作的语法演示 3.1 输出符合条件的文本 3.2 删除符合条件的文本 3.3 替换符合条件的文本 3.4 插入新行 二、awk 1.概述 2. awk命令格式 3.awk工作过程 4.awk内置变量 5.awk用法示例 5.1 按行输出文本 5.2 按字段输出文本 一、sed 1.概述 se

shell编程--awk

作用 切片,显示信息的,按列显示,也是逐行处理的 语法 awk [options] 'commands' file ==options -F可以指定分割符,默认分隔符为空格或制表符TAB,-F ==command(时空) BEGIN{} {} END{} awk -F: 'BEGIN{print "awk开始"}{print $0}END{print "awk结束"}' p

【linux】玩转awk 二

awk的去重和统计 数据如下 siteName a11 siteName b22 siteName a11 siteName a11 siteName c33 siteName b22 1.去重awk '{a[$0]++} END {for(i in a) {print a[i]}}' file.log2.统计awk '{a[$0]++} END {for(i in

awk总结

awk介绍 AWK是一种优良的文本处理工具。它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母)的最大功能取决于一个人所拥有的知识。AWK 提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句

awk和sed

参考: SED简明教程 AWK简明教程 AWK user guide awk手册

3GPP R18 NTN中的skipping TN measurement(NR SIB25有什么用?)

R18 38.300中对NTN-TN mobility进行了增强,如下黄色字体: 对于NTN-TN mobility,网络可以在SIB25中广播关于NR TN和EUTRA TN覆盖区域的小区信息。 Earth-Fixed、Quasi-Earth-fixed和Earth-Moving cells都支持此功能。覆盖信息会包含在地理TN areas list中,还会指示相关的频率信息。

sed awk 第二版学习(二)—— 正则表达式语法

目录 一、表达式 二、成行的字符 1. 反斜杠 2. 通配符 3. 编写正则表达式 4. 字符类 (1)字符的范围 (2)排除字符类 (3)POSIX 字符类补充 5. 重复出现的字符 6. 匹配单词 7. gres 替换脚本 8. 限制范围         在计算机术语中,表达式是某些需要被计算的东西。一个表达式描述一种结果。正则表达式描述了模式或特殊的字符序列,