免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 3460 | 回复: 20
打印 上一主题 下一主题

[文本处理] 俩文件处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-09 22:11 |只看该作者 |倒序浏览
本帖最后由 力哥丶 于 2013-01-10 00:14 编辑

A:

10.0.0.1
10.0.0.2
10.0.0.3
10.0.0.3
10.0.0.4
10.0.0.4
10.0.0.5
10.0.0.6
10.0.0.7

B:

10.0.0.2
10.0.0.3
10.0.0.12
10.0.0.7
10.0.0.9
10.0.0.9

我想将这俩个文件,不相同的打印出来。

我的想法是将俩个文件放入到不同的数组中,进行比较,想不同的结果放入到第三个数组,然后循环输出结果。
试着写了几次,都提示错误。

论坛徽章:
0
2 [报告]
发表于 2013-01-09 22:23 |只看该作者
可以先合并成一个文件啊。

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
3 [报告]
发表于 2013-01-09 23:01 |只看该作者
  1. comm -3 <(sort -t. -k4 -n a|awk '!a[$0]++') <(sort -t. -k4 -n b|awk '!a[$0]++')|xargs -l
复制代码

论坛徽章:
0
4 [报告]
发表于 2013-01-10 00:04 |只看该作者
回复 3# reyleon


    貌似不支持两位数的比较,比如10.0.0.12  最后只能是一位

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
5 [报告]
发表于 2013-01-10 00:15 |只看该作者
本帖最后由 yestreenstars 于 2013-01-10 00:17 编辑
  1. awk 'NR==FNR{a[$0];b[$0];next}{b[$0];c[$0]}END{for(i in b){if(!((i in a)&&(i in c)))print i}}'
复制代码
  1. [root@localhost ~]# cat a
  2. 10.0.0.1
  3. 10.0.0.2
  4. 10.0.0.3
  5. 10.0.0.3
  6. 10.0.0.4
  7. 10.0.0.4
  8. 10.0.0.5
  9. 10.0.0.6
  10. 10.0.0.7
  11. [root@localhost ~]# cat b
  12. 10.0.0.2
  13. 10.0.0.3
  14. 10.0.0.12
  15. 10.0.0.7
  16. 10.0.0.9
  17. 10.0.0.9
  18. [root@localhost ~]# awk 'NR==FNR{a[$0];b[$0];next}{b[$0];c[$0]}END{for(i in b){if(!((i in a)&&(i in c)))print i}}' a b
  19. 10.0.0.1
  20. 10.0.0.12
  21. 10.0.0.4
  22. 10.0.0.5
  23. 10.0.0.6
  24. 10.0.0.9
  25. [root@localhost ~]#
复制代码

论坛徽章:
0
6 [报告]
发表于 2013-01-10 00:39 |只看该作者
本帖最后由 力哥丶 于 2013-01-10 02:46 编辑

回复 5# yestreenstars


    还没睡觉呢。

    之前我是这样写的。NR==FNR是第一个文件内容,NR>FNR是第二个文件内容。放入到第三个数组循环。提示错误,

     还有很多没掌握啊。受教了。谢谢
  1. awk 'NR==FNR{a[$0]}NR!=FNR{b[$0]}{if(a[$0]!=b[$0])next;}{c[$0]}END{for(i in c)print  i}' a b > c
复制代码
数组这样不能比较啊?if(a[$0]!=b[$0])
修改后的代码:
  1. awk 'NR==FNR{a[$0]}NR!=FNR{b[$0]};{c[$0]}END{for(i in a){if(!((i in b)&&(i in c)))print i}}'  a b > c
复制代码

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
7 [报告]
发表于 2013-01-10 09:12 |只看该作者
  1. awk 'NR==FNR{a[$0]}NR!=FNR{b[$0]}{if(a[$0]!=b[$0])next;}{c[$0]}END{for(i in c)print  i}' a b > c
复制代码
这句代码,由于a[$0]和b[$0]都没有赋值,所以无论何时,a[$0]=b[$0]都成立,所以你的这句“{if(a[$0]!=b[$0])next;}”相当于是作废了,所以打印的结果是所有的内容(去重)。
  1. awk 'NR==FNR{a[$0]}NR!=FNR{b[$0]};{c[$0]}END{for(i in a){if(!((i in b)&&(i in c)))print i}}'  a b > c
复制代码
这句代码,看上去跟我的差不多,但你这样做只能打印出a文件独有的内容,你按我END后面那样改一下就OK了。
回复 6# 力哥丶


   

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
8 [报告]
发表于 2013-01-10 10:26 |只看该作者
  1. grep -vxFf a.txt b.txt
  2. grep -vxFf b.txt a.txt
复制代码

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
9 [报告]
发表于 2013-01-10 10:38 |只看该作者
回复 4# rongpmcu


    不可以吗? 按照楼主给的文本及要求,结果应该是对的吧,不过具体文本还得具体分析,不好的地方是根据IP排序,这代码可能不通用。
  1. [root@centos ~]# cat a
  2. 10.0.0.1
  3. 10.0.0.2
  4. 10.0.0.3
  5. 10.0.0.3
  6. 10.0.0.4
  7. 10.0.0.4
  8. 10.0.0.5
  9. 10.0.0.6
  10. 10.0.0.7
  11. [root@centos ~]# cat b
  12. 10.0.0.2
  13. 10.0.0.3
  14. 10.0.0.12
  15. 10.0.0.7
  16. 10.0.0.9
  17. 10.0.0.9
  18. [root@centos ~]# comm -3 <(sort -t. -k4 -n a|awk '!a[$0]++') <(sort -t. -k4 -n b|awk '!a[$0]++')|xargs -l
  19. 10.0.0.1
  20. 10.0.0.4
  21. 10.0.0.5
  22. 10.0.0.6
  23. 10.0.0.9
  24. 10.0.0.12
  25. [root@centos ~]#
复制代码

论坛徽章:
0
10 [报告]
发表于 2013-01-10 11:04 |只看该作者
回复 9# reyleon
  1. [root@rongp]  ~
  2. # cat CA
  3. 10.0.0.1
  4. 10.0.0.2
  5. 10.0.0.3
  6. 10.0.0.3
  7. 10.0.0.4
  8. 10.0.0.4
  9. 10.0.0.5
  10. 10.0.0.6
  11. 10.0.0.7

  12. [root@rongp]  ~
  13. # cat CB
  14. 10.0.0.2
  15. 10.0.0.3
  16. 10.0.0.12
  17. 10.0.0.7
  18. 10.0.0.9
  19. 10.0.0.9

  20. [root@rongp]  ~
  21. # comm -3 <(sort -t. -k4 -n CA|awk '!a[$0]++') <(sort -t. -k4 -n CB|awk '!a[$0]++')|xargs -l
  22. comm: 文件2 没有被正确排序
  23. 10.0.0.1
  24. 10.0.0.4
  25. 10.0.0.5
  26. 10.0.0.6
  27. 10.0.0.9
  28. 10.0.0.12



  29. 然后我把命令拆分了,发现排序没问题

  30. [root@rongp]  ~
  31. # sort -t. -k4 -n CA |awk '!a[$0]++' >aa

  32. [root@rongp]  ~
  33. # sort -t. -k4 -n CB |awk '!a[$0]++' >bb

  34. [root@rongp]  ~
  35. # cat aa
  36. 10.0.0.1
  37. 10.0.0.2
  38. 10.0.0.3
  39. 10.0.0.4
  40. 10.0.0.5
  41. 10.0.0.6
  42. 10.0.0.7

  43. [root@rongp]  ~
  44. # cat bb
  45. 10.0.0.2
  46. 10.0.0.3
  47. 10.0.0.7
  48. 10.0.0.9
  49. 10.0.0.12

  50. [root@rongp]  ~
  51. # comm -3 aa bb
  52. 10.0.0.1
  53. 10.0.0.4
  54. 10.0.0.5
  55. 10.0.0.6
  56.         10.0.0.9
  57. comm: 文件2 没有被正确排序
  58.         10.0.0.12

  59. 我把bb文件的最后一行删除

  60. [root@rongp]  ~
  61. # comm -3 aa bb
  62. 10.0.0.1
  63. 10.0.0.4
  64. 10.0.0.5
  65. 10.0.0.6
  66.         10.0.0.9
  67. 这样就能运行
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP