grep两个整数并比较它们

时间:2017-06-16 19:18:54

标签: bash grep compare

我正在尝试编写执行以下操作的脚本:

  1. 给出一个看起来像这样的字符串"有5个苹果和3个橙子"
  2. 提取两个整数(5,3)
  3. 比较他们
  4. 我完成了提取部分。

    Changer

    但NUM会是这样的:

    NUM=echo $String | grep -o "[0-9]\+"
    

    我尝试5 3 \n ${NUM[0]}只是为了得到第一个值,但它没有效果。

    有什么建议吗?

4 个答案:

答案 0 :(得分:0)

您分配给NUM的方式不正确。 您帖子中的grep模式也是如此。 写得像这样:

input='There are 5 apples and 3 oranges'
nums=($(grep -Eo '[0-9]+' <<< "$input"))

${nums[0]}将包含第一个数字,${nums[1]}第二个,依此类推。

如果输入来自命令:

nums=($(cmd | grep -Eo '[0-9]+'))

答案 1 :(得分:0)

我会使用流程替换和mapfile执行此操作:

$ mapfile -t nums < <(grep -Eo '[[:digit:]]+' <<< 'There are 5 apples and 3 oranges')
$ declare -p nums
declare -a nums='([0]="5" [1]="3")'

这确保只有换行符分隔数组元素。在这种情况下,这不是问题,因为搜索项是数字序列,但它是一种适用于任何模式的强大方法。

请注意mapfile需要Bash 4.0或更新版本。

答案 2 :(得分:0)

GNU awk

gawk '{if($1>$2){print $1">"$2}else if($1<$2){print $1"<"$2} else {print $1"="$2}}' FPAT='[0-9]+' <<<'There are 5 apples and 8 oranges'
  

FPAT的值应该是一个提供常规字符串的字符串   表达。这个正则表达式描述了每个的内容   字段。

答案 3 :(得分:0)

使用GNU awk for FPAT:

$ echo 'There are 5 apples and 3 oranges' |
    awk -v FPAT='[0-9]+' '{print ($1 > $2 ? "greater" : "lesser")}'
greater
$ echo 'There are 2 apples and 3 oranges' |
    awk -v FPAT='[0-9]+' '{print ($1 > $2 ? "greater" : "lesser")}'
lesser