免费注册 查看新帖 |

Chinaunix

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

[文本处理] 求助:在for in中使用awk替换内容【已解决】 [复制链接]

论坛徽章:
2
15-16赛季CBA联赛之八一
日期:2017-07-06 14:20:4715-16赛季CBA联赛之上海
日期:2017-08-21 22:14:34
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-06-13 22:40 |只看该作者 |倒序浏览
本帖最后由 irockey 于 2017-06-18 00:57 编辑

标题没有说清楚现在有两个文件
  1. [root@154 home]# cat file1
  2. 3-1-1 POTV=1,POTA=0,POTP=2
  3. 1-4-76 POTV=1,POTA=0,POTP=1
  4. 7-1-19 POTV=1,POTA=1,POTP=1
  5. 3-2-33 POTV=1,POTA=1,POTP=2
  6. 4-1-10 POTV=1,POTA=1,POTP=2
  7. 7-1-2 POTV=1,POTA=1,POTP=2
  8. 3-1-10 POTV=1,POTA=1,POTP=2
  9. 3-2-34 POTV=1,POTA=1,POTP=2
  10. 7-2-22 POTV=1,POTA=1,POTP=1
  11. 5-1-19 POTV=1,POTA=1,POTP=1
  12. 1-4-77 POTV=1,POTA=1,POTP=1
  13. 7-1-3 POTV=1,POTA=1,POTP=2
  14. 3-2-35 POTV=1,POTA=1,POTP=1
  15. 7-1-4 POTV=1,POTA=1,POTP=1
  16. 5-1-2 POTV=1,POTA=1,POTP=2
  17. 7-2-23 POTV=1,POTA=1,POTP=1
  18. 3-2-36 POTV=1,POTA=1,POTP=1
  19. 3-1-11 POTV=1,POTA=1,POTP=2
  20. 1-4-78 POTV=1,POTA=1,POTP=2
  21. 3-2-37 POTV=1,POTA=1,POTP=2
  22. 7-1-6 POTV=1,POTA=1,POTP=1
复制代码
  1. [root@154 home]# cat file2
  2. 1-1-1
  3. 1-1-2
  4. 1-1-3
  5. 1-1-4
  6. 1-1-5
  7. 1-1-6
  8. 1-1-7
  9. 1-1-8
  10. 1-1-9
  11. 1-1-10
  12. 1-1-11
  13. 1-1-12
  14. 1-1-13
  15. 1-1-14
  16. 1-1-15
  17. 1-1-16
复制代码
            其中file1只有270行,
             file2有345行,
             file1的第一列内容都包含在file2中
             这是两个文件的关系
要求:
      我想以file2为样本,将file1第一列匹配file2行进行替换

即file2的第一行为
1-1-1
在file1中存在
1-1-1 POTV=1,POTA=2,POTP=0
然后将file2中内容替换为file1中该行内容(或者添加file1中第二列内容)
即变成以下样子
1-1-1 POTV=1,POTA=2,POTP=0
1-1-2
1-1-3
1-1-4
1-1-5


遇到问题:
想知道怎么能实现以file2为样本,进行替换
我的第一反应是awk,因为awk对段分离顺手,但后来发现思路不对
请大神指导

论坛徽章:
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 [报告]
发表于 2017-06-13 23:51 |只看该作者
回复 1# irockey

$ cat file1
1-1-1 POTV=1,POTA=0,POTP=2
1-4-76 POTV=1,POTA=0,POTP=1

$ cat file2
1-1-1
1-1-2

$ awk 'FNR==NR{a[$1]=$2;next}{$2=a[$1];print}' file1 file2
1-1-1 POTV=1,POTA=0,POTP=2
1-1-2

论坛徽章:
2
15-16赛季CBA联赛之八一
日期:2017-07-06 14:20:4715-16赛季CBA联赛之上海
日期:2017-08-21 22:14:34
3 [报告]
发表于 2017-06-13 23:54 |只看该作者
自问自答吧,希望有大神能帮忙想出另外的思路
  1. for i in `cat file2`
  2. do
  3.         s=`awk  '$1==''"'$i'"''{print $0}' file1`
  4.         echo $i
  5.         if [ "$s" == "" ];
  6.                 then echo "$i" >>1
  7.         else
  8.                 echo "$s" >>1
  9.         fi
  10. done
复制代码

这里的awk是多此一举,换成grep -w完全能实现一样的功能

论坛徽章:
2
15-16赛季CBA联赛之八一
日期:2017-07-06 14:20:4715-16赛季CBA联赛之上海
日期:2017-08-21 22:14:34
4 [报告]
发表于 2017-06-15 00:29 |只看该作者
回复 2# jason680

先谢谢大神,awk还是博大精深啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP