$awk 'NR==FNR{a[$1]=$0;next}NR>FNR{if($1 in a)print $0"\n"a[$1]}' a.txt b.txt

你好。能不能解释下这句话的具体意思呢。... 你好。能不能解释下这句话的具体意思呢。 展开
 我来答
luneng8183
2012-09-03 · TA获得超过901个赞
知道小有建树答主
回答量:606
采纳率:100%
帮助的人:507万
展开全部
在awk里,NR和FNR的含义相近,唯一的区别就是作用范围,NR是所有读取的行信息计数,而FNR是正在读取文件的行信息技术,FNR在文件切换时会从0重新开始计数,所以上述语句的意思是:

NR==FNR在判断是不是在读a.txt,如果是a.txt则以第一个数据项为key,以整行信息为数据组成数组;
NR>FNR则判断是不是在读b.txt,因为此时NR=(a.txt的总行数+FNR),如果是,则判断第一个数据项在不在a.txt数据组成的数组里,如果在,则打印本行加数组项。

例子:
o@t /tmp $ cat a.txt
1 abc
2 def
3 ghi
4 jlm

o@t /tmp $ cat b.txt
3 shit
1 rubb

o@t /tmp $ awk 'NR==FNR{a[$1]=$0;next}NR>FNR{if($1 in a)print $0"\n"a[$1]}' a.txt b.txt
3 shit
3 ghi
1 rubb
1 abc
追问
额  看了很多遍,还是不明白?  还能再详细点吗?万分感谢
追答
NR是英文number of record的简写,就是awk每从文件或输入流中读入一行数据,就把这个变量加一。这个是awk自带的变量。如果你还不懂的话,可以找本中文的awk书看看就明白了,呵呵。
c6iz
2012-09-01 · TA获得超过1417个赞
知道大有可为答主
回答量:1426
采纳率:100%
帮助的人:1029万
展开全部
'NR==FNR{a[$1]=$0;next}
当NR==FNR时,把$0就是整行赋值给数组A
当NR>FNR时如果$1在数组A里的话打印$0和数组a的$1

可能还有点偏差,但大体上差不多是这个意思
来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式