比较Bash中的两个小数和打印相似性?
我正在编写一个脚本,比较两个非常相似的十进制数字,我希望该脚本打印两个数字共享的部分。例如,假设我有数字42.86579和42.84578。由于这两个数字都有42.8部分的共同点,我希望脚本输出42.8。我应该如何实现它?比较Bash中的两个小数和打印相似性?,bash,shell,Bash,Shell,我正在编写一个脚本,比较两个非常相似的十进制数字,我希望该脚本打印两个数字共享的部分。例如,假设我有数字42.86579和42.84578。由于这两个数字都有42.8部分的共同点,我希望脚本输出42.8。我应该如何实现它?a=42.86579 a=42.86579 b=42.84578 [[ ${a%.*} != ${b%.*} ]] && exit for ((i=0;i<${#a};i++)); do if [[ ${a:$i:1} == ${b:$i:1}
a=42.86579
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
b=42.84578
[[${a%.*}!=${b%.*}]]退出(&E)
对于((i=0;ia=42.86579
b=42.84578
[[${a%.*}!=${b%.*}]]退出(&E)
对于((i=0;i您可以使用sed
在两个字符串中搜索最长的公共前缀):
$ x=42.86579
$ y=42.84578
$ sed "s/\(.*\).* \1.*/\1/" <<< "$x $y"
42.8
$x=42.86579
$y=42.84578
$sed“s/\(.*\).*\1.*/\1/”您可以使用sed
在两个字符串中搜索最长的公共前缀:
$ x=42.86579
$ y=42.84578
$ sed "s/\(.*\).* \1.*/\1/" <<< "$x $y"
42.8
$x=42.86579
$y=42.84578
$sed“s/\(.*\).*\1.*/\1/“Back reference,好主意!GNU grep:grep-Po'(.*)也可以这样做。*\K\1'sed的另一个变体:sed“s/\(.*\).*/\1/“@Cyrus:Cool.我已经更新了答案。grep
版本仍然是最简洁的:)反向引用,好主意!GNU grep:grep-Po'(.*)。*\K\1'与sed的另一个变体:sed“s/\(.*).*/\1/“@Cyrus:Cool。我已经更新了答案。grep
版本仍然是最简洁的:)
$ grep -Po '(.*).* \K\1' <<< "$x $y"
42.8