免费注册 查看新帖 |

Chinaunix

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

[文本处理] 文件内容分类显示的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-06 10:19 |只看该作者 |倒序浏览
本帖最后由 a307847162 于 2015-05-07 18:31 编辑

以下是要处理的文本文件里的内容:

/xxx/xxxxx/lishugao_test/case_lishugao.sh:打开或读取失败
sha1sum: /xxx/xxxxx/lishugao_test/a.sh: 没有那个文件或目录
/xxx/xxxxx/lishugao_test/a.sh:打开或读取失败
sha1sum: /xxx/xxxxx/lishugao_test/log2.txt: 没有那个文件或目录
/xxx/xxxxx/lishugao_test/log2.txt:打开或读取失败
sha1sum: /xxx/xxxxx/lishugao_test/ok.sh: 没有那个文件或目录
/xxx/xxxxx/lishugao_test/ok.sh:打开或读取失败
sha1sum: /xxx/xxxxx/lishugao_test/passwordok.sh: 没有那个文件或目录
/xxx/xxxxx/lishugao_test/passwordok.sh:打开或读取失败
sha1sum: /xxx/xxxxx/lishugao_test/password.sh: 没有那个文件或目录
/xxx/xxxxx/lishugao_test/password.sh:打开或读取失败
sha1sum: /xxx/xxxxx/lishugao_test/d.sh: 没有那个文件或目录
/xxx/xxxxx/lishugao_test/d.sh:打开或读取失败
sha1sum: /xxx/xxxxx/lishugao_test/g.sh: 没有那个文件或目录
/xxx/xxxxx/lishugao_test/g.sh:打开或读取失败
/xxx/xxxxx/lishugao/b.sh: 确定
/xxx/xxxxx/lishugao/b: 确定
/xxx/xxxxx/lishugao/c: 确定
/xxx/xxxxx/lishugao/sha.sha: 失败
/xxx/xxxxx/lishugao/a: 确定
/xxx/xxxxx/lishugao/a.sh: 确定



我想要写个shell,把上诉内容处理完后显示如下:
-----------------------------------------以下是确定的内容--------------------------------------------------------/xxx/xxxxx/lishugao/b.sh: 确定
/xxx/xxxxx/lishugao/b: 确定
/xxx/xxxxx/lishugao/c: 确定
-----------------------------------------以上是确定的内容--------------------------------------------------------

-----------------------------------------以下是没有的文件或目录--------------------------------------------------
sha1sum: /xxx/xxxxx/lishugao_test/g.sh: 没有那个文件或目录
-----------------------------------------以上是没有的文件或目录--------------------------------------------------

-----------------------------------------以下是打开或读取失败的内容----------------------------------------------
/xxx/xxxxx/lishugao_test/d.sh:打开或读取失败
-----------------------------------------以上是打开或读取失败的内容----------------------------------------------

-----------------------------------------以下是失败的内容--------------------------------------------------------
/xxx/xxxxx/lishugao/sha.sha: 失败
-----------------------------------------以上是失败的内容--------------------------------------------------------



望各位大侠不吝赐教


2015.5.7   sort -t ':' -k 3   以:为分隔按照第三列的内容来排序,这个可以排一下序,但是离我想要的结果还有点区别,继续努力

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
2 [报告]
发表于 2015-05-06 10:27 |只看该作者

论坛徽章:
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
3 [报告]
发表于 2015-05-06 10:48 |只看该作者
  1. echo -----------------------------------------以下是确定的内容--------------------------------------------------------
  2. grep "确定" 1.txt
  3. echo -----------------------------------------以上是确定的内容--------------------------------------------------------
  4. echo ""
  5. echo -----------------------------------------以下是没有的文件或目录--------------------------------------------------
  6. grep "没有" 1.txt
  7. echo -----------------------------------------以上是没有的文件或目录--------------------------------------------------
  8. echo ""
  9. echo -----------------------------------------以下是打开或读取失败的内容----------------------------------------------
  10. grep "或" 1.txt
  11. echo -----------------------------------------以上是打开或读取失败的内容----------------------------------------------
  12. echo ""
  13. echo -----------------------------------------以下是失败的内容--------------------------------------------------------
  14. grep "失败" 1.txt | grep -v "或"
  15. echo -----------------------------------------以上是失败的内容--------------------------------------------------------
复制代码

论坛徽章:
0
4 [报告]
发表于 2015-05-06 11:39 |只看该作者
回复 3# Shell_HAT


    这个方法是可以的
但是用在我的脚本里就显得效率很低了,不知道怎么优化


diffsha(){
    for ((i=1;i<=`cat log.txt|wc -l`;i++))
    do
       line=`sed -n "${i}p" log.txt`
       IP=`echo $line|awk '{print $1}'`
       user=`echo $line|awk '{print $2}'`
       PASS=`echo $line|awk '{print $3}'`
       hostsha=`echo $line|awk '{print $4}'`
       difffile=`echo $line|awk '{print $5}'`
   expect -c "
   set timeout -1;
   spawn ssh $user@$IP sha1sum -c $difffile$hostsha
   expect {
        "*yes/no" {send "yes"\r;exp_continue}
        "*assword*" {send $PASS\r}
   }
   interact;"
     if [ $? = 0 ]
     then
        echo "------------------------------------------------------------------------------------------------------"
        echo "远程执行sha1sum成功!"
        echo "------------------------------------------------------------------------------------------------------"
     else
         echo "-----------------------------------------------------------------------------------------------------"
         echo "远程执行sha1sum失败!"
         echo "-----------------------------------------------------------------------------------------------------"
    fi
     done
   }
while true
do
echo "*************************************************"
echo "#    1.获取本机的哈希值                                       #"
echo "#    2.分发哈希值文件到远程主机                               #"
echo "#    3.远程比较哈希值                                         #"
echo "#    4.退出                                                   #"
echo "#    BY:李XX  QQ:7560171X   2015.5.6                         #"
echo "*************************************************"
    echo -n "请输入要执行的操作前面的数字并敲回车键:"
    read xuan
    case $xuan in
      1) getsha;;
      2) scpsha;;
      3) echo '-----------------以下是哈希值一致的文件--------------------------------------'
         diffsha | grep -F 确定
         echo '-----------------以下是服务器B上不存在的文件---------------------------------'
         diffsha | grep -F 打开或读取失败
         echo '-----------------以下是哈希值一致的目录及其文件------------------------------'
         diffsha | grep -F 没有那个文件或目录
         echo '-----------------以下是哈希值不一致的文件------------------------------------'
         diffsha | grep -F ': 失败'
         ;;
      *) exit 0;;
     esac
done

论坛徽章:
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
5 [报告]
发表于 2015-05-06 13:10 |只看该作者
本帖最后由 Shell_HAT 于 2015-05-06 13:12 编辑

回复 4# a307847162


1、你觉得哪部分效率低?如果单纯觉得代码太长那就另说了。代码长度和效率不见得成正比。
2、如果你说的效率低是指处理时间长,请给出现在这个代码的处理时间,也好相互比较。

可以先考虑执行一次 diffsha 把结果放到临时文件里面,然后处理这个临时文件,而不是重复调用4次 diffsha

论坛徽章:
0
6 [报告]
发表于 2015-05-06 14:02 |只看该作者
本帖最后由 a307847162 于 2015-05-06 14:09 编辑

回复 5# Shell_HAT


    还是有点低,应该是执行一次diffsha得到一个服务器的反馈信息,然后直接用个语句对这串信息进行处理,处理成我想要的那种分类,tee保存成文件并在屏幕上打印,然后继续diffsha下一个服务器,并对信息进行分类处理,直到配置文件log.txt里列举的服务器信息检测完为止才对

论坛徽章:
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
7 [报告]
发表于 2015-05-06 14:10 |只看该作者
回复 6# a307847162


    没问题,就按照这个思路做吧,总之比你重复调用函数强。

论坛徽章:
0
8 [报告]
发表于 2015-05-06 14:34 |只看该作者
回复 7# Shell_HAT


    关键的问题就是,我不知道用什么语句可以对这串信息进行分类成我想要的样子

论坛徽章:
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
9 [报告]
发表于 2015-05-06 14:55 |只看该作者
回复 8# a307847162
  1. diffsha(){
  2.     for ((i=1;i<=`cat log.txt|wc -l`;i++))
  3.     do
  4.        line=`sed -n "${i}p" log.txt`
  5.        IP=`echo $line|awk '{print $1}'`
  6.        user=`echo $line|awk '{print $2}'`
  7.        PASS=`echo $line|awk '{print $3}'`
  8.        hostsha=`echo $line|awk '{print $4}'`
  9.        difffile=`echo $line|awk '{print $5}'`
  10.    expect -c "
  11.    set timeout -1;
  12.    spawn ssh $user@$IP sha1sum -c $difffile$hostsha
  13.    expect {
  14.         "*yes/no" {send "yes"\r;exp_continue}
  15.         "*assword*" {send $PASS\r}
  16.    }
  17.    interact;"
  18.      if [ $? = 0 ]
  19.      then
  20.         echo "------------------------------------------------------------------------------------------------------"
  21.         echo "远程执行sha1sum成功!"
  22.         echo "------------------------------------------------------------------------------------------------------"
  23.      else
  24.          echo "-----------------------------------------------------------------------------------------------------"
  25.          echo "远程执行sha1sum失败!"
  26.          echo "-----------------------------------------------------------------------------------------------------"
  27.     fi
  28.      done
  29.    }
  30. while true
  31. do
  32. echo "*************************************************"
  33. echo "#    1.获取本机的哈希值                                       #"
  34. echo "#    2.分发哈希值文件到远程主机                               #"
  35. echo "#    3.远程比较哈希值                                         #"
  36. echo "#    4.退出                                                   #"
  37. echo "#    BY:李XX  QQ:7560171X   2015.5.6                         #"
  38. echo "*************************************************"
  39.     echo -n "请输入要执行的操作前面的数字并敲回车键:"
  40.     read xuan
  41.     case $xuan in
  42.       1) getsha;;
  43.       2) scpsha;;
  44.       3) str=$(diffsha)
  45.          echo '-----------------以下是哈希值一致的文件--------------------------------------'
  46.          echo "$str" | grep -F 确定
  47.          echo '-----------------以下是服务器B上不存在的文件---------------------------------'
  48.          echo "$str" | grep -F 打开或读取失败
  49.          echo '-----------------以下是哈希值一致的目录及其文件------------------------------'
  50.          echo "$str" | grep -F 没有那个文件或目录
  51.          echo '-----------------以下是哈希值不一致的文件------------------------------------'
  52.          echo "$str" | grep -F ': 失败'
  53.          ;;
  54.       *) exit 0;;
  55.      esac
  56. done
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP