免费注册 查看新帖 |

Chinaunix

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

[文本处理] awk变量问题(有没有shell下的eval功能) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-27 14:57 |只看该作者 |倒序浏览
如题:
  1. $ cat >test.sh
  2. awk 'BEGIN{
  3.         Ar1="a,b,c";
  4.         split(Ar1,A,",");for(i in A){A1[A[i]];delete A[i];};
  5.         Ar2="d,e,f";
  6.         split(Ar2,A,",");for(i in A){A2[A[i]];delete A[i];};
  7.         }
  8.         {if($1 in A1){
  9.                 print "1";
  10.         }else{
  11.                 if($1 in A2){
  12.                         print "2";
  13.                 }else{
  14.                         print "no";
  15.                 }
  16.         }
  17.         }' $*

  18. $ echo e|./test.sh
  19. 2
  20. $ echo a|./test.sh
  21. 1
  22. $ echo h|./test.sh
  23. no
  24. $
复制代码
我想实现从多个数组中匹配行内容,输出不同结果。
上述是2个数组,可以用if else嵌套,但实际情况可能有20个数组,这。。。
如果用循环,不知道awk下有没有类似shell下eval功能。。。或者有其他好的想法。
  1. AN=20
  2. for(i=1;i<=AN;i++){
  3.         if($1 in A[1-20])....
复制代码

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
2 [报告]
发表于 2012-12-27 15:32 |只看该作者
用二维数组应该可以解决你的困难,示例(可能有更简单的办法,没有研究):
  1. awk 'BEGIN {
  2.     str1 = "a,b,c"
  3.     str2 = "1,2,3"
  4.     for (i = split(str1, ar, ","); i > 0; --i)
  5.         ar2[1,i] = ar[i]

  6.     for (i = split(str2, ar, ","); i > 0; --i)
  7.         ar2[2,i] = ar[i]
  8.         
  9.     for (i in ar2) print i ": " ar2[i]
  10. }'
复制代码
  1. [seesea2517@UC ~]# awk 'BEGIN {
  2.     str1 = "a,b,c"
  3.     str2 = "1,2,3"
  4.     for (i = split(str1, ar, ","); i > 0; --i)
  5.         ar2[1,i] = ar[i]

  6.     for (i = split(str2, ar, ","); i > 0; --i)
  7.         ar2[2,i] = ar[i]
  8.         
  9.     for (i in ar2) print i ":" ar2[i]
  10. }'
  11. 21:1
  12. 22:2
  13. 23:3
  14. 11:a
  15. 12:b
  16. 13:c
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP