免费注册 查看新帖 |

Chinaunix

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

[文本处理] 各位国庆节快乐,麻烦各位看下我这两个文件对比的的写法能否简化下 [复制链接]

论坛徽章:
2
狮子座
日期:2014-08-15 00:24:232015元宵节徽章
日期:2015-03-06 15:52:30
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-10-02 17:56 |只看该作者 |倒序浏览
本帖最后由 djzhangxing 于 2014-10-02 17:56 编辑

我想判断file1的第一列和file2中的第一列和file1的中最后一列和file2的最后一列是否相同,不同则打印。

  1. 我最初的想法是想把file1、file2把$1和$NF重新导出2个新文件,然后通过数组,将两个文件 IP相同的合并成为一个,现在文件就是4列了,然后在$1和$3、$2和$4判断是否相同,这样一个好麻烦,最终的判断还没写完哈~~还能简单的写法吗?数组用的不太熟,不知道这样能不能行!生成两个文件的时候能否不产生,直接调用呢~!~国庆快乐哈
  2. awk 'NR==FNR{a[$1]=$0;next}{print a[$1]"|"$0}' file_new1 file_new2
复制代码

  1. 源文件
  2. cat file1
  3. 10.0.0.10 255.255.0.0  10.0.0.1
  4. 10.0.0.11 255.255.0.0  10.0.0.1
  5. 10.0.0.12 255.255.0.0  10.0.0.254

  6. cat file2
  7. 10.0.0.10 10.0.0.1
  8. 10.0.0.12 10.0.0.1
复制代码

论坛徽章:
3
丑牛
日期:2014-09-13 18:19:22摩羯座
日期:2014-10-10 17:43:02水瓶座
日期:2014-10-16 01:00:22
2 [报告]
发表于 2014-10-02 19:01 |只看该作者
学生党:飘过~不知道楼主是不是这个意思?
Administrator@白头发 ~
$ awk 'NR==FNR{a[$1]=$NF;next}a[$1]!=$NF{print $1,a[$1],$2}' yhsafe1.txt yhsafe2.txt
10.0.0.12 10.0.0.254 10.0.0.1

论坛徽章:
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
3 [报告]
发表于 2014-10-02 19:28 |只看该作者
楼主的语文是数学老师教得吧~{:3_185:}

论坛徽章:
2
狮子座
日期:2014-08-15 00:24:232015元宵节徽章
日期:2015-03-06 15:52:30
4 [报告]
发表于 2014-10-02 22:05 |只看该作者
哈哈~是体育老师!不好意思哈~~写了自己没读,我梳理下了烦请各位在查看哈~~~~!
我想判断file1的第一列和file2中的第一列,file1的中最后一列和file2的最后一列是否相同,不同则打印。
其实我就是要判断下10.0.0.10在(file1中的第二列是否与file2的第二列相同)和(file1中的第三列是否与file2的第三列相同),不同和不存在则打印!

  1. 源文件
  2. cat file1
  3. 10.0.0.10 255.255.0.0  10.0.0.1
  4. 10.0.0.11 255.255.0.0  10.0.0.1
  5. 10.0.0.12 255.255.0.0  10.0.0.254

  6. cat file2
  7. 10.0.0.10 255.255.0.0 10.0.0.1
  8. 10.0.0.12 10.0.0.1
复制代码
回复 3# yestreenstars


   

论坛徽章:
8
戌狗
日期:2014-09-26 16:39:44水瓶座
日期:2014-10-10 02:06:57金牛座
日期:2014-10-11 23:04:042015亚冠之首尔
日期:2015-06-23 15:37:0015-16赛季CBA联赛之天津
日期:2016-01-22 18:58:2915-16赛季CBA联赛之佛山
日期:2016-05-31 19:18:0815-16赛季CBA联赛之同曦
日期:2016-08-10 16:26:3315-16赛季CBA联赛之辽宁
日期:2018-01-10 11:47:40
5 [报告]
发表于 2014-10-02 22:07 |只看该作者
不知道楼主是什么意思  我的理解是不打印  第一个文件的第一列和最后一列分别相等于第二文件的第一列和最后一列?

要是这样的话 那就什么都不打印的吧

论坛徽章:
2
狮子座
日期:2014-08-15 00:24:232015元宵节徽章
日期:2015-03-06 15:52:30
6 [报告]
发表于 2014-10-04 23:09 |只看该作者
喔~可能我没把表达清楚。这样吧

  1. caf 1.txt
  2. 10.0.0.10 10.0.0.1        10.0.0.10 10.0.0.1
  3. 10.0.0.12 10.0.0.254        10.0.0.12 10.0.0.1
  4. 这个文件四列,我想判断$1==$3且$2==$4,不匹配则打印
复制代码


回复 5# wiliiwin


   

论坛徽章:
8
戌狗
日期:2014-09-26 16:39:44水瓶座
日期:2014-10-10 02:06:57金牛座
日期:2014-10-11 23:04:042015亚冠之首尔
日期:2015-06-23 15:37:0015-16赛季CBA联赛之天津
日期:2016-01-22 18:58:2915-16赛季CBA联赛之佛山
日期:2016-05-31 19:18:0815-16赛季CBA联赛之同曦
日期:2016-08-10 16:26:3315-16赛季CBA联赛之辽宁
日期:2018-01-10 11:47:40
7 [报告]
发表于 2014-10-05 11:10 |只看该作者
djzhangxing 发表于 2014-10-04 23:09
喔~可能我没把表达清楚。这样吧

回复 5# wiliiwin

完全无法理解了,这样看成了一个文件了,不是两个文件的事情了,还是表达的不够清晰哦

论坛徽章:
2
狮子座
日期:2014-08-15 00:24:232015元宵节徽章
日期:2015-03-06 15:52:30
8 [报告]
发表于 2014-10-06 22:12 |只看该作者
本帖最后由 djzhangxing 于 2014-10-06 22:15 编辑

,我之前那个条件太乱了,所以我把它变成一个文件了,这样更能让你们读懂,就是一个文件! 这样话也能达到我的需要的结果~~ 回复 7# wiliiwin


   

论坛徽章:
8
戌狗
日期:2014-09-26 16:39:44水瓶座
日期:2014-10-10 02:06:57金牛座
日期:2014-10-11 23:04:042015亚冠之首尔
日期:2015-06-23 15:37:0015-16赛季CBA联赛之天津
日期:2016-01-22 18:58:2915-16赛季CBA联赛之佛山
日期:2016-05-31 19:18:0815-16赛季CBA联赛之同曦
日期:2016-08-10 16:26:3315-16赛季CBA联赛之辽宁
日期:2018-01-10 11:47:40
9 [报告]
发表于 2014-10-06 23:26 |只看该作者
本帖最后由 wiliiwin 于 2014-10-06 23:27 编辑

回复 8# djzhangxing
  1. # awk  '{if(!($1==$3 && $2==$4)){print $0}}'  11.txt
  2. 10.0.0.12 10.0.0.254        10.0.0.12 10.0.0.1
复制代码
难道是这样。。。。。。。。

论坛徽章:
3
丑牛
日期:2014-09-13 18:19:22摩羯座
日期:2014-10-10 17:43:02水瓶座
日期:2014-10-16 01:00:22
10 [报告]
发表于 2014-10-07 00:50 |只看该作者
本帖最后由 李满满 于 2014-10-07 00:52 编辑

学生党:飘过~闲来无事用python写一下~

  1. $ cat yhsafe.py
  2. #!/usr/bin/env python
  3. # -*- coding: gbk -*-

  4. from sys import argv
  5. import fileinput as fi
  6. list=[]
  7. def pd_args(args):
  8.         if len(args[1:])!=2:
  9.                 return False
  10.         else:
  11.                 return True

  12. def pd_gets(args):
  13.         for line in fi.input(args[1:]):
  14.                 if fi.filename()=='file1.txt':
  15.                         list.append(line.strip().split())
  16.                 elif fi.filename()=='file2.txt':
  17.                         diff_f=line.strip().split()
  18.                         for x in list:
  19.                                 if diff_f[0]==x[0] and diff_f[1]!=x[2]:
  20.                                         print "{} {}".format(' '.join(x),line),
  21.                                         break
  22.                                 else:
  23.                                         pass

  24. if __name__=="__main__":
  25.         if pd_args(argv):
  26.                 pd_gets(argv)

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP