技术标签: Linux中NR的含义
转载:https://www.cnblogs.com/irockcode/p/7044722.html
nr,表示awk开始执行程序后所读取的数据行数.
fnr,与nr功用类似,不同的是awk每打开一个新文件,fnr便从0重新累计.
下面看两个例子:
1,对于单个文件nr 和fnr 的 输出结果一样的 :
2,但是对于多个文件 :
在看一个例子关于nr和fnr的典型应用:
现在有两个文件格式如下:
想要得到的结果是将用户名,帐号和金额在同一行打印出来,如下:
张三|000001|10
张三|000001|20
李四|000002|30
李四|000002|15
执行如下代码
注释:
由nr=fnr为真时,判断当前读入的是第一个文件a,然后使用{a[$2]=$0;next}
循环将a文件的每行记录都存入数组a,并使用$2第2个字段作为下标引用.
由nr=fnr为假时,判断当前读入了第二个文件b,然后跳过{a[$2]=$0;next},
对第二个文件cdr的每一行都无条件执行{print a[$1]"|"$2},
此时变量$1为第二个文件的第一个字段,与读入第一个文件时,采用第一个文件第二个字段$2为数组下标相同.
因此可以在此使用a[$1]引用数组。
=========================================================================
下面是cu大神jason680的详细过程分析
awk -f'|' 'nr==fnr{a[$2]=$0;next}{print a[$1] fs $2}' a b
there is no begin block, and fs="|" by -f'|' argument
没有开始模块,直接识别-f选项,加参数
start to first file 'a'
从a文件的第一行开始
1. read file a line 1 and get data 张三|000001
读取文件a的第一行,得到数据
a: $0=张三|000001
b: $1=张三
c: $2=000001
nr and fnr are the same equal to 1, and run nr=fnr block
此时,nr与fnr的值相等都为1,执行nr=fnr模块
nr==fnr{a[$2]=$0;next}
a: a[$2]=$0
a[000001]=张三|000001
b: next
next cycle and get next line data
2. read file a line 2 and get data 李四|000002
读取文件a的第二行,得到数据
a: $0=李四|000002
b: $1=李四
c: $2=000002
nr and fnr are the same equal to 2, and run nr=fnr block
此时,nr与fnr的值相等都为2,执行nr=fnr模块
nr==fnr{a[$2]=$0;next}
a: a[$2]=$0
a[000002]=李四|000002
b: next
next cycle and get next line data
end of the file a, and get next file b data
读完文件a,然后读取下一个文件b的数据
3. read file b line 1, and get data 000001|10
读取文件b的第一行,然后得到数据
a: $0=000001|10
b: $1=000001
c: $2=10
now, nr is 3 and fnr is 1, they are not eqaul
此时,nr与fnr的值不同,不执行nf=fnr模块,执行下一个模块{print a[$1] fs $2}
and didn't run nr=fnr block,
and run next block {print a[$1] fs $2}
a[$1] => a[000001] => 张三|000001
fs => |
$2 => 10
you will see the output
张三|000001|10
4. read file b line 2, and get data 000001|20
a: $0=000001|20
b: $1=000001
c: $2=20
nr is 4 and fnr is 2, they are not eqaul
and didn't run nr=fnr block,
and run next block {print a[$1] fs $2}
a[$1] => a[000001] => 张三|000001
fs => |
$2 => 20
you will see the output
张三|000001|20
cycle to read the file b
5. read file b line 3, and get data 000002|30
...
output==> 李四|000002|30
6. read file b line 4, and get data 000002|15
...
output==> 李四|000002|15
补充:
找出两个文件之间的不同部分
awk 'nr==fnr{a[$0]++} nr>fnr&&!a[$0]' 1.txt 2.txt
awk 'nr==fnr{a[$0]}nr>fnr{ if(!($1 in a)) print $0}' 1.txt 2.txt
找出两个文件之间的相同部分
awk 'nr==fnr{a[$0]++} nr>fnr&&a[$0]' 1.txt 2.txt
awk 'nr==fnr{a[$0]}nr>fnr{ if($1 in a) print $0}' 1.txt 2.txt
文章浏览阅读342次,点赞4次,收藏6次。该函数还允许使用 kmeans 聚类聚合行。如果行数太大,以至于 R 无法再处理其分层聚类,大约超过 1000 行,则建议这样做。与其单独显示所有行,不如提前对行进行聚类,并仅显示聚类中心。可以通过参数kmeans_k调整集群的数量。来源:https://www.rdocumentation.org/packages/pheatmap/versions/1.0.12/topics/pheatmap。一个绘制聚类热图的函数,可以更好地控制一些图形参数,如单元大小等。Examples 例子。_pheatmap基于kmeans绘制热图
文章浏览阅读369次。<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml..._div四周阴影效果
文章浏览阅读1.7k次。Java 通过反射获取实体类对应的注释 _java获取实体类属性注解
文章浏览阅读2.3k次,点赞5次,收藏10次。在使用MyBatis进行多表联查时,想要获取关联外键的表的数据信息,使用association进行联查,但当外键表的字段名和主表相同时,外键表的数据就会被覆盖。_mybatis association绑定相同对象
文章浏览阅读2.7k次。体验1: 军神太强啦,1小时屯6题,瞬间AK,接下来的90分钟一直在跟榜体验2: A题原题,循环写得好就不麻烦,不然要写很多行,情况要想全并不难。 B题原题,有了上一场的提示之后,这题就不难了。 C题很简单(小声)。 D题卡掉了O(T*N*K*log(N))的方法,卡掉我5发logN ,不过还是可做。 E题水dp(组合数学)。 F题原题,记忆化搜索。体验3: 被DC两题卡到..._在湘大xx奶茶店夏天推出了新的饮料价格为5元。 很多学生都要买饮料,每个学生
文章浏览阅读2.8k次。需求: 点击预览图标查看该pdf报告问题: 1、最早是直接将请求倒的url放入到<web-view src="{{realUrl}}"></web-view>中展示,ios可以,安卓显示无法查看。 2、通过微信自身的API实现:wx.downloadFile({})、wx.saveFile({})、wx.openDocument({}) 3、对于文件较大的,下载较慢,需要点击过的进行缓存,再次点击无需下载,直接打开。 将点击过的下载的url添加给list的tem_微信浏览器请求pdf文件会缓存吗
文章浏览阅读680次。服务部署之配置网络策略服务(NPS)(基于Windows Server 2022)_windows server 部署网络策略服务
文章浏览阅读4.8k次,点赞6次,收藏29次。基于距离、概率、重构的视频异常检测概述_视频异常检测综述
文章浏览阅读107次。洛谷P3388#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ull;const int N=2e4+5;const int mod=1e9+7;vector<int> g[N];set<int> v;int dfn[N],low[N],fa[N];int n,m,tot;void tarjan(int x){
文章浏览阅读1k次。导语:小编相信,经常会使用到电脑的朋友们,对于启用硬件加速这个词一定都是不陌生的吧!可是呢,对于一些电脑小白们来说,往往会搞不清楚,这个启用硬件加速到底是个什么意思呢?启用之后,我们的电脑又会发生什么变化呢?也有一些人,在启用之后,却不知道应该如何关闭这个硬件加速,接下来,小编就来为大家介绍一下启用硬件加速是什么意思,以及它应该如何关闭。启用硬件加速是什么意思?简而言之,硬件加速就是利用硬件模块来..._linux 禁用硬件加速合成、图层和素材面板
文章浏览阅读8.1k次,点赞13次,收藏191次。1. 写在前面很多高级的机器学习模型(xgboost, lgb, cat)和神经网络模型, 它们相对于普通线性模型在进行预测时往往有更好的精度,但是同时也失去了线性模型的可解释性, 所以这些模型也往往看作是黑箱模型, 在2017年,Lundberg和Lee的论文提出了SHAP值这一广泛适用的方法用来解释各种模型(分类以及回归), 使得前面的黑箱模型变得可解释了,这篇文章主要整理一下SHAP的使用, 这个在特征选择的时候特别好用。这次整理, 主要是在xgboost和lgb等树模型上的使用方式, 并且用一个_python对shap的计算只能针对大数值吗
文章浏览阅读625次。这篇文章深入探讨了操作系统的各个方面,以及相关的计算机科学概念。文章的结构包括对操作系统的定义和功能的讨论,涵盖了硬件管理、操作系统特征、启动过程、运行环境等多个方面。作者使用思维导图和具体版本(如哈工大版本、王道版本)作为辅助,系统性地介绍了操作系统的运行机制,包括中断与异常、系统调用等内容。文章还回顾了操作系统的历史发展,按照不同线索(如哈工大版本)进行叙述,涵盖了操作系统的发展与分类、体系结构等方面。最后,文章提到了一些考研真题,强调了对计算机科学相关概念的深入理解。_2021