首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查数字中的数字数

检查数字中的数字数
EN

Stack Overflow用户
提问于 2017-01-30 10:21:48
回答 3查看 1.2K关注 0票数 0

我有包含数字的文件。在这里,我必须循环并检查文件中的每个数字是否由11位数字组成。如果找到的数字包含小于/多于11位数字,则应将该数字写入输出文件。

以下是我的尝试:

代码语言:javascript
复制
number="$(< all_numbers.txt)"
for numbers in $number ;
do 
    if [${#numbers} == 11];
    then  
        echo $numbers = "${#numbers}" > num.txt;
    fi; 
done;

当我运行我的代码时,我会得到以下错误:

-bash:[11:找不到命令

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-30 10:57:24

Unix使用-eq来比较数字。"==“用于字符串。我觉得你可以避开大部分分号。

所以你的剧本应该是:

代码语言:javascript
复制
number="$(< all_numbers.txt)"
for numbers in $number
do 
    if [ ${#numbers} -eq 11 ];  then  
        echo $numbers = "${#numbers}" > num.txt
    fi
done

更新

如果需要不等于(大于或小于) 11的元素,只需将条件更改为[ ${#numbers} -ne 11 ]

更新2:添加其他检查:

代码语言:javascript
复制
number="$(< all_numbers.txt)"
for numbers in $number
do 
    if [[ ! ${#numbers} =~ ^93 ]] ; then
        echo $numbers = "${#numbers}" > num93.txt
    fi
    if [ ${#numbers} -ne 11 ];  then  
        echo $numbers = "${#numbers}" > num.txt
    fi
done

希望这能有所帮助!

票数 1
EN

Stack Overflow用户

发布于 2017-01-30 13:57:21

您说这个数字应该写到输出文件中,如果它这样做了,而不是由11位组成。你得颠倒逻辑。

由于您似乎使用bash,所以这样做的方法之一是:

代码语言:javascript
复制
(( ${#numbers} == 11 )) || echo $number >num.txt

请注意,这将考虑00000000001为11位数。你的帖子并没有说明这是否真的是你想要达到的目标。

还请注意,与您的方法一样,此解决方案不检查数据是否真的是数字。11个字母的串也将被视为数字。

当然,您也可以通过编写

代码语言:javascript
复制
grep -vE '^.{11}$' >num.txt

如果您也想检查数字和筛选出非数字,您可以这样做。

代码语言:javascript
复制
grep -vE '^[0-9]{11}$' >num.txt
票数 0
EN

Stack Overflow用户

发布于 2017-01-31 22:16:23

我喜欢在测试数字时使用双底片,以便正确地拒绝非数字:

代码语言:javascript
复制
for number in $(cat all_numbers.txt)
do 
    if ! [ "$number" -lt 10000000000 ] 2>/dev/null
    then  
        echo "$number = '${#number}'"
    fi
done > num.txt

我已经稍微更改了变量名,因为您有一个复数的“数字”,指的是每个单独的数字。这段代码有一个单数$number来指示输入文件中的每一次迭代。我还使用数学来确保我们只计算11位数字(大于或等于10000000000),但在显示输出时使用与原始问题相同的可变长度计算。

我猜您每次都不想覆盖文件,所以我将输出移到循环之外。您也可以在回显行的末尾使用>> num.txt,但这实际上会在输入文件中按数字打开文件一次,这是效率低下的。

我在这里编写的代码也是与POSIX兼容的(没有巴什,它在破折号中工作得很好)。注意,旧的商业UNIXes可能抱怨数字大于2立方(最大有符号32位整数)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41933497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档