免费注册 查看新帖 |

Chinaunix

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

【求助】哪位老大有空,帮小弟修改下我的脚本 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-06-30 10:37 |只看该作者
写的挺好的,能实现了就行吧。 不过vi用的挺有意思,要是我估计用sed。

论坛徽章:
0
12 [报告]
发表于 2011-06-30 11:28 |只看该作者
写的挺好的,能实现了就行吧。 不过vi用的挺有意思,要是我估计用sed。
dahe_1984 发表于 2011-06-30 10:37


在perl里好像直接应用一些系统命令会有点问题,不知道你遇到了吗?我现在改用perl在写,进度好慢,边学边写。

论坛徽章:
0
13 [报告]
发表于 2011-06-30 12:30 |只看该作者
本帖最后由 houzi105 于 2011-06-30 12:41 编辑

需要学习使用hash

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
14 [报告]
发表于 2011-06-30 13:22 |只看该作者
回复 13# houzi105

  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;


  4. open(IN_HOST_IP,"hosts_ip")||die "Can not open:$!";
  5. open(IN_test_hosts,"test_hosts")||die "Can not open:$!";
  6. open(OUT_host_log,">","host.log")||die "Can not open:$!";

  7. my %hash_test;

  8. while (<IN_HOST_IP>){
  9.         chomp;
  10.         #print $_,"\n";
  11.         $hash_test{$_}=1;
  12. }

  13. while (<IN_test_hosts>){
  14.         chomp;
  15.         #print $_."\n";
  16.         if (!($hash_test{$_})){
  17.                 $_.="\n";
  18.                 print OUT_host_log;
  19.         }
  20. }

  21. close(OUT_host_log);
  22. close(IN_HOST_IP);
  23. close(IN_test_hosts);
复制代码
  1. head hosts_ip test_hosts host.log
  2. ==> hosts_ip <==
  3. aaa
  4. bbb
  5. ccc
  6. ddd

  7. ==> test_hosts <==
  8. bbb
  9. ddd
  10. eee
  11. fff

  12. ==> host.log <==
  13. eee
  14. fff
复制代码

论坛徽章:
0
15 [报告]
发表于 2011-06-30 14:10 |只看该作者
回复 12# houzi105

啥问题? 应该不会有啥问题

论坛徽章:
0
16 [报告]
发表于 2011-06-30 15:04 |只看该作者
回复 15# dahe_1984


应用系统命令的时候,总报“find: incomplete statement”,这类错误。

论坛徽章:
0
17 [报告]
发表于 2011-06-30 15:09 |只看该作者
回复 14# yinyuemi



谢谢兄弟的回复,但是我系统的/etc/hosts文件格式是这样的
#  /etc/hosts
#
# This file contains the hostnames and their address for hosts in the
# network.  This file is used to resolve a hostname into an Internet
# address.  
10.1.2.33    test33
10.1.2.34    test34
10.1.2.35    test35
10.1.2.36    test36
10.1.2.37    test37


如果单列你这样的方式确实可以,但是我这个文件至少有2列,有些文件有3列以上,这样的方法就不可以实现了。

还有一个问题,就是我需要先排除带#的行,实现起来好头痛,我现在有回到使用系统命令的方式处理,还在研究中。

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
18 [报告]
发表于 2011-06-30 15:16 |只看该作者
回复 17# houzi105


    你加个判断,排除#开头的行,
   用正则,改变下hash的下标,为你的第一列。

PS. awk也是一个不错的文本处理工具,可以试试。

论坛徽章:
0
19 [报告]
发表于 2011-06-30 16:17 |只看该作者
回复 18# yinyuemi

谢谢兄弟,在系统中我知道怎么使用,放在perl里面,把我已经搞的很狼狈了。还在看书中,对hash不是很理解。

论坛徽章:
0
20 [报告]
发表于 2011-06-30 16:44 |只看该作者
  我写个shell的方法,perl的请无视我
  1. for i in `cat hosts_ip`
  2. do
  3.         eval "sed -i 's/$i//g' test_hosts"
  4. done
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP