免费注册 查看新帖 |

Chinaunix

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

shell 序列 置位 [复制链接]

论坛徽章:
2
辰龙
日期:2013-09-24 12:26:05卯兔
日期:2013-09-24 12:27:37
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-28 17:18 |只看该作者 |倒序浏览
一个文件 a, 其内容是
002
005
007
还有一个序列b,内容是 001 002 003 004 005 006 007 008 009 010
如何得把文件里存在于序列b的项 置1,不存在的置0
比如上面得到的结果是 0100101000

论坛徽章:
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
2 [报告]
发表于 2012-02-28 21:23 |只看该作者
  1. for i in 001 002 003 004 005 006 007 008 009 010
  2. do
  3.     grep $i urfile >nul && echo -n 1 || echo -n 0
  4. done
复制代码

论坛徽章:
1
辰龙
日期:2014-05-22 11:38:58
3 [报告]
发表于 2012-02-28 21:34 |只看该作者
  1. echo "001 002 003 004 005 006 007 008 009 010" | awk 'BEGIN{while(getline x < "a")a[x]++}{for(i=1;i<=NF;i++)if($i in a) printf("1"); else printf("0");printf("\n")}'
  2. 0100101000
复制代码

论坛徽章:
2
辰龙
日期:2013-09-24 12:26:05卯兔
日期:2013-09-24 12:27:37
4 [报告]
发表于 2012-02-29 01:07 |只看该作者
谢了!

论坛徽章:
0
5 [报告]
发表于 2012-02-29 01:36 |只看该作者
  1. awk 'NR==FNR{i++;a[i]=a[i-1]$0}NR>FNR{for(j=1;j<=NF;j++){if(match(a[i],$j)){$j=1}else($j=0)}print}' a b|sed 's/\s//g'
复制代码

论坛徽章:
0
6 [报告]
发表于 2012-02-29 02:10 |只看该作者
  1. cat a b|xargs -n1|sort|uniq -c|awk -vORS='' '{print $1-1}'
复制代码
这个不好,如果b不是接顺序排的就没用

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
7 [报告]
发表于 2012-02-29 07:31 |只看该作者
其实不用那么复杂。
  1. awk 'NR==FNR{a[$1];next}{for (i=1;i<=NF;i++) printf ($i in a)?"1":"0";printf RS}' a b
复制代码

论坛徽章:
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
8 [报告]
发表于 2012-02-29 10:04 |只看该作者
来个 sed 的:
  1. [seesea2517@uc]$ sed -re "s/$(cat a.txt | tr '\n' '|')/x/g;s/[^x ]+/0/g;s/x/1/g;s/ //g;" b.txt
  2. 0100101000
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP