侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

Shell awk两个文件的对比 NR和FRN

2023-11-17 星期五 / 0 评论 / 0 点赞 / 54 阅读 / 2128 字

使用awk对两个文件的对比: 认识:NR和FRN NR:表示当前记录数FNR:也表示当前记录数,但是FNR的作用域只在一个文件内.如果重新打开文件,FNR会从1开始.文件aaaabbbccc文件bee

 

使用awk对两个文件的对比:

认识:NR和FRN

NR:表示当前记录数FNR:也表示当前记录数,但是FNR的作用域只在一个文件内.如果重新打开文件,FNR会从1开始.文件aaaabbbccc文件beeefffawk '{print NR;print FNR;print $0;}' a  #结果如下    1    1    aaa    2    2    bbb    3    3    cccawk '{print NR;print FNR;print $0;}' a b #结果如下    1    1    aaa    2    2    bbb    3    3    ccc    4    1    aaa    5    2    ccc    6    3    ddd**结论:看懂了么,awk在处理两个文件的时候,NR是自动的链接在第一个文件id的后面,FNR是从1重新的开始**
  • 当b文件只用一列,a文件有多列。b文件中的当前列和a文件中的其中的一列进行对比
a文件:111 aaa222 bbb333 ccc444 ddd555 eeeb文件aaacccddd判断的方式如下:awk  'NR==FNR{a[$0]}NR>FNR{ if($2 in a)    print $0}' b a #找出两文件中相同的值awk  'NR==FNR{a[$0]}NR>FNR{ if(!($2 in a)) print $0}' b a #找出文件2中不同的值
  • 当b文件有多列,a文件有多列。b文件中一行和a文件中的其中的一行进行对比
a文件:111 aaa222 bbb333 ccc444 ddd555 eeeb文件:111 aaa222 bbb444 ddd判断的方式如下:awk 'NR==FNR{a[$0]++} NR>FNR&&a[$0]' b a  #找出两文件中完全同的行awk 'NR==FNR{a[$0]++} NR>FNR&&!a[$0]' b a #找出两文件中不同的行
  •  当文件中有多列, 把文件中也有多列, 并且么有两行是相同的进行对比
aaa文件:111	aaa222	bbb333	ccc444	ddd555	eee555	aaa555	cccbbb文件:aaa	a1ccc	c1ddd	d1判断的方式如下:awk 'NR<=FNR{a[$1]=$2}NR>FNR{print $0,a[$2]}' bbb aaa 注释:是将aaa文件中的第二列和bbb文件中的第一列进行对比如果相同的话就在aaa文件的后面把bbb文件中的第二列给添加上去结果如下:111	aaa a1222	bbb 333	ccc c1444	ddd d1555	eee 555	aaa a1555	ccc	 c1

 

广告 广告

评论区