免费注册 查看新帖 |

Chinaunix

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

[文本处理] shell下文本处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-01-19 17:49 |只看该作者 |倒序浏览
需求:读1文件中的每一行去和2文件的所有行匹配,遍历2文件,第一次被匹配到就开始1文件中的下一行继续和2文件的所有行匹配。。。如此进行,直至1文件每行的匹配工作完成。结果打印出1文件中有但是2文件中没有的行

看看我这个问题在哪里?(先不考虑使用awk和sed等等其他方法)

代码:
#! /bin/bash

for line1 in `cat 1`
do
        for line2 in `cat 2`
        do
                if [ "$line1" == "$line2" ]
                then
                        break
                else
                        continue
                fi
                echo $line1
                break
        done
done

论坛徽章:
0
2 [报告]
发表于 2015-01-19 18:57 |只看该作者
本帖最后由 dalin 于 2015-01-19 18:57 编辑

最近我也经常有类似的需求,我的做法是这样的
  1. for host in `cat hosts.bak`
  2. do
  3.     if ! grep -Eq "^$host$" hosts ;then  
  4.         echo $host
  5.     fi
  6. done
复制代码

论坛徽章:
768
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
3 [报告]
发表于 2015-01-19 19:05 |只看该作者
本帖最后由 Herowinter 于 2015-01-19 19:32 编辑

回复 1# sun_jzz
建议改成这样.

  1. #! /bin/bash

  2. for line1 in `cat 1`
  3. do
  4.     found=0
  5.     for line2 in `cat 2`
  6.     do
  7.         if [ "$line1" == "$line2" ];then
  8.             found=1
  9.             break
  10.         fi
  11.     done
  12.     if [ $found -eq 0 ];then
  13.         echo $line1
  14.     fi
  15. done
复制代码
  1. ./t.sh
  2. 1
  3. 2
  4. 3
复制代码
  1. cat 1
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6

  8. cat 2
  9. 4
  10. 5
  11. 6
  12. 7
  13. 8
  14. 9
复制代码

论坛徽章:
768
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
4 [报告]
发表于 2015-01-19 19:08 |只看该作者
本帖最后由 Herowinter 于 2015-01-19 19:26 编辑

回复 1# sun_jzz
前提是你非要这样做的话,比较好的方法是grep -vFf 2 1
   

求职 : Linux运维
论坛徽章:
4
狮子座
日期:2014-12-20 10:15:35天秤座
日期:2014-12-24 16:54:192015年亚洲杯之科威特
日期:2015-01-27 21:32:482015亚冠之平阳省
日期:2015-10-22 16:31:52
5 [报告]
发表于 2015-01-19 21:11 |只看该作者
之前有个帖子中提到comm,似乎可以用
comm  -23  1  2
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP