比较两个小数并在Bash中打印相似之处?

时间:2015-12-25 16:04:54

标签: bash shell

我正在编写一个比较两个非常相似的十进制数字的脚本,我希望脚本能够打印两个数字共享的部分。例如,假设我有数字42.86579和42.84578。由于这两个数字共有42.8部分,我希望脚本输出42.8。我该如何实施呢?

2 个答案:

答案 0 :(得分:3)

您可以使用sed搜索两个字符串中最长的公共前缀:

$ x=42.86579
$ y=42.84578    
$ sed "s/\(.*\).* \1.*/\1/" <<< "$x $y"
42.8

或者使用GNU grep稍微简洁一点:

$ grep -Po '(.*).* \K\1' <<< "$x $y"
42.8

答案 1 :(得分:2)

a=42.86579
b=42.84578

[[ ${a%.*} !=  ${b%.*} ]] && exit
for ((i=0;i<${#a};i++)); do 
  if [[ ${a:$i:1} == ${b:$i:1} ]]; then 
    echo -n ${a:$i:1}
  else
    break
  fi
done

输出:

42.8

请参阅:Bash's parameter expansion