免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: chevalier
打印 上一主题 下一主题

怎么比较两个文件不同的行??  关闭 [复制链接]

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
11 [报告]
发表于 2003-12-16 21:31 |只看该作者

怎么比较两个文件不同的行??

ARGIND==1{a[$0]}
#ARGIND==1 判断是否正在处理第一个文件,本例为文件a
# {a[$0]} 初始化(或叫做定义)a[$0]
ARGIND>1&&!($0 in a){print $0}
#ARGIND>1 判断是否在处理第二个或第n个文件,本例只有一个文件b
#并且判断a[$0]是否未定义,然后打印$0
测试环境
bash 2.05b
GNU Awk 3.1.3
结果如下

  1. r2007@www r2007 $ cat a  
  2. 2
  3. 3
  4. 4
  5. 1
  6. D1
  7. D2
  8. r2007@www r2007 $ cat b
  9. 2
  10. 3
  11. d2
  12. d3
  13. df
  14. jd2
  15. jd3
  16. D1
  17. D12
  18. D2f
  19. r2007@www r2007 $ awk 'ARGIND==1{a[$0]}ARGIND>1&&!($0 in a){print $0}' a b  
  20. d2
  21. d3
  22. df
  23. jd2
  24. jd3
  25. D12
  26. D2f
  27. r2007@www r2007 $
复制代码

论坛徽章:
0
12 [报告]
发表于 2003-12-16 22:35 |只看该作者

怎么比较两个文件不同的行??

awk处理多个文件的机制是什么啊?处理完一个然后下一个?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
13 [报告]
发表于 2003-12-17 08:51 |只看该作者

怎么比较两个文件不同的行??

按照文件名出现的顺序依次处理。

论坛徽章:
0
14 [报告]
发表于 2003-12-17 10:28 |只看该作者

怎么比较两个文件不同的行??

懂了。多谢!总能从大侠那里学到不少东西。

论坛徽章:
0
15 [报告]
发表于 2003-12-17 11:00 |只看该作者

怎么比较两个文件不同的行??

THANK TO R2007,我的环境还是运行没有结果,不过意思我已经全明白,解释的很清楚。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
16 [报告]
发表于 2003-12-17 11:35 |只看该作者

怎么比较两个文件不同的行??

[quote]原帖由 "雪之树"]THANK TO R2007,我的环境还是运行没有结果,不过意思我已经全明白,解释的很清楚。[/quote 发表:

需要gawk!
如果你有
用gawk替代awk
如果没有,下载一个安装一下。

论坛徽章:
0
17 [报告]
发表于 2003-12-24 15:34 |只看该作者

怎么比较两个文件不同的行??

如果我的两个文件的格式不同如下.
a文件格式
10001|49|29
10002|454|sfd
10003|88a|34
10004|aaab|111

b文件格式
10002
10006
10008

我想实现这样功能:如果a文件中某行第一个字段的值在b文件有,则删掉这行
该怎么做呢??

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
18 [报告]
发表于 2003-12-25 08:28 |只看该作者

怎么比较两个文件不同的行??

  1. awk -F"|" 'NR==FNR{a[$0]}NR!=FNR&&!($1 in a){print $0}' b a  
复制代码

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
19 [报告]
发表于 2003-12-25 09:09 |只看该作者

怎么比较两个文件不同的行??

[quote]原帖由 "r2007"]
  1. awk -F"|" 'NR==FNR{a[$0]}NR!=FNR&&!($1 in a){print $0}' b a
复制代码
[/quote 发表:


好有风格哟! pf...

论坛徽章:
0
20 [报告]
发表于 2003-12-29 11:48 |只看该作者

怎么比较两个文件不同的行??

“ARGIND”: This variable is a `gawk' extension; in other `awk' implementations, it is not special.

即在其他非gawk中,不能用下面的语句实现
awk 'ARGIND==1{a[$0]}ARGIND>1&&!($0 in a){print $0}' a b


用什么来替换“ARGIND”?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP