免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 5876 | 回复: 38
打印 上一主题 下一主题

[文本处理] 继续出题 - 从一百个数中找不存在的数 [复制链接]

论坛徽章:
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
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-23 13:25 |只看该作者 |倒序浏览
本帖最后由 rdcwayx 于 2012-11-23 15:26 编辑

有一百个1到100的数字,为乱序的,其中缺一个数字,也就是说另有一个数字是重复的。

查找出缺的那个数字。

原题出在c 板块。我稍微改了一下。
http://bbs.chinaunix.net/thread-4055339-1-1.html

论坛徽章:
71
15-16赛季CBA联赛之同曦
日期:2018-08-23 15:41:42辰龙
日期:2014-08-15 09:07:43狮子座
日期:2014-06-03 13:55:33亥猪
日期:2014-06-02 11:17:08巨蟹座
日期:2014-05-06 10:02:03午马
日期:2014-05-04 08:18:27亥猪
日期:2014-04-29 11:11:32技术图书徽章
日期:2014-04-24 15:51:26技术图书徽章
日期:2014-04-17 11:01:53辰龙
日期:2014-04-15 12:45:46亥猪
日期:2014-04-11 09:06:23射手座
日期:2014-04-01 15:28:10
2 [报告]
发表于 2012-11-23 13:34 |只看该作者
sort+uniq

论坛徽章:
0
3 [报告]
发表于 2012-11-23 13:36 |只看该作者
本帖最后由 cuteorange 于 2012-11-23 13:40 编辑

回复 1# rdcwayx


#!/bin/bash
A=(1 3 2 4 2 5 6 7 9 10)
for i in {1..10}
do
    B[$i]=0
done
for j in ${A[@]}
do
    B[$j]=1
done
for i in {1..10}
do
    if [ ${B[$i]} -eq 0 ]; then
        echo "$i missing"
    fi
done

评分

参与人数 1可用积分 +4 收起 理由
rdcwayx + 4 赞一个! 数组用的很好。

查看全部评分

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
4 [报告]
发表于 2012-11-23 13:45 |只看该作者
本帖最后由 yestreenstars 于 2012-11-23 14:19 编辑

版主看一下我这个怎么样?因为你没说明这些数字是怎么排列的,所以我先假设它们是一行一个数字:
  1. awk '{a[$0]=$0}END{len=asort(a,b);for(i=2;i<=len;i++)if(b[i]!=b[i-1]+1){c=b[i-1]+1;print c}}' file
复制代码
如果不是一行一个,而是用空格隔开的话,稍微改动一下就好了。

评分

参与人数 1可用积分 +4 收起 理由
rdcwayx + 4 赞一个!

查看全部评分

论坛徽章:
13
丑牛
日期:2013-08-16 15:08:22技术图书徽章
日期:2013-11-26 10:13:40双鱼座
日期:2013-11-08 15:03:26戌狗
日期:2013-11-08 13:52:30技术图书徽章
日期:2013-11-05 14:06:30戌狗
日期:2013-10-31 11:45:42CU十二周年纪念徽章
日期:2013-10-24 15:41:34天秤座
日期:2013-10-11 14:55:08子鼠
日期:2013-09-26 19:36:35水瓶座
日期:2013-09-26 17:44:56午马
日期:2013-08-26 10:24:23丑牛
日期:2013-08-19 14:43:22
5 [报告]
发表于 2012-11-23 13:47 |只看该作者
假设urfile里面每一行存放的是`一百个1到100的数字,为乱序的,其中缺一个数字,也就是说另有一个数字是重复的。`
awk '{a[NR]=$0}END{l=asort(a,b);for(i=1;i<=l;i++)if(b[i+1]-b[i]==2)print (b[i+1]+b[i])/2}' urfile   

评分

参与人数 1可用积分 +4 收起 理由
rdcwayx + 4 这个更不错, 缺一个以上的数字也都能找到

查看全部评分

论坛徽章:
0
6 [报告]
发表于 2012-11-23 13:58 |只看该作者
sort -n file | cat -n | awk '$1!=$2{print $2}'

论坛徽章:
0
7 [报告]
发表于 2012-11-23 13:59 |只看该作者
这个是重复的
sort -n file | cat -n | awk '$1!=$2{print $2}'
这个是没有的
sort -n file | cat -n | awk '$1!=$2{print $1}'

评分

参与人数 1可用积分 +4 收起 理由
rdcwayx + 4 赞一个! 另辟捷径,代码长度最短。

查看全部评分

论坛徽章:
13
丑牛
日期:2013-08-16 15:08:22技术图书徽章
日期:2013-11-26 10:13:40双鱼座
日期:2013-11-08 15:03:26戌狗
日期:2013-11-08 13:52:30技术图书徽章
日期:2013-11-05 14:06:30戌狗
日期:2013-10-31 11:45:42CU十二周年纪念徽章
日期:2013-10-24 15:41:34天秤座
日期:2013-10-11 14:55:08子鼠
日期:2013-09-26 19:36:35水瓶座
日期:2013-09-26 17:44:56午马
日期:2013-08-26 10:24:23丑牛
日期:2013-08-19 14:43:22
8 [报告]
发表于 2012-11-23 14:06 |只看该作者
本帖最后由 代号:军刀 于 2012-11-23 14:09 编辑

这个的做法是key-value
  1. awk '{a[$0]=$0}END{for(i=1;i<=99;i++)if(a[i]=="")print i}' urfile
复制代码

论坛徽章:
0
9 [报告]
发表于 2012-11-23 14:11 |只看该作者
sort urfile |uniq -c|awk '($1==2){print $2}'

论坛徽章:
71
15-16赛季CBA联赛之同曦
日期:2018-08-23 15:41:42辰龙
日期:2014-08-15 09:07:43狮子座
日期:2014-06-03 13:55:33亥猪
日期:2014-06-02 11:17:08巨蟹座
日期:2014-05-06 10:02:03午马
日期:2014-05-04 08:18:27亥猪
日期:2014-04-29 11:11:32技术图书徽章
日期:2014-04-24 15:51:26技术图书徽章
日期:2014-04-17 11:01:53辰龙
日期:2014-04-15 12:45:46亥猪
日期:2014-04-11 09:06:23射手座
日期:2014-04-01 15:28:10
10 [报告]
发表于 2012-11-23 14:21 |只看该作者
本帖最后由 zhaopingzi 于 2012-11-23 14:45 编辑

这100个数不知道如何排列的,也不知道是啥分割的,所以任何使用AWK写的都是不严谨的

  1. for(( i=1;i<=100;i++ ))
  2. {
  3. result=`grep -w "$i" file`
  4. if [ -z "$result" ];then
  5. echo $i no show
  6. exit
  7. fi
  8. }
复制代码
找到缺的数值;就exit
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP