如何计算bash中两个字符串之间的不同字母数字?

时间:2019-02-28 09:15:34

标签: bash

a="ABCDEFG"  
b="ABCDXYG"

如何在bash中计算这两个字符串之间的不同字母数字? 在这种情况下,答案是2(E != XF != Y)。

2 个答案:

答案 0 :(得分:0)

据我了解,您希望两个字符串中处于相同位置的不同字母的数量。

所以:

  1. 在两个字符串中的每个字符处插入换行符(以便我们可以用bash解析它们)
  2. 将第一个字符串(带有换行符)放在一列中,第二个字符串放在另一列中
  3. 仅打印具有不同列的行
  4. 数行。

paste <(<<<"$a" sed 's/./&\n/g') <(<<<"$b" sed 's/./&\n/g') |
awk '$1 != $2' |
wc -l

一个有趣的纯bash解决方案:

declare -i cnt
cnt=0
while 
    IFS= read -r -n1 -u3 c1 &&
    IFS= read -r -n1 -u4 c2
do
    if [ "$c1" != "$c2" ]; then
        cnt=cnt+1
    fi
done 3<<<"$a" 4<<<"$b"
echo "$cnt"

答案 1 :(得分:0)

这是Shellcheck干净的纯Bash代码,没有子进程,也没有I / O:

#! /bin/bash

a=ABCDEFG
b=ABCDXYG

declare -i diffcount=0
(( ${#a} < ${#b} )) && maxlen=${#b} || maxlen=${#a}
for ((i=0; i<maxlen; i++)) ; do
    [[ ${a:i:1} != "${b:i:1}" ]] && diffcount+=1
done

echo $diffcount

maxlen是字符串的最大长度。如果其中一个字符串比另一个字符串长,那么长字符串中短字符串长度之后的每个字符都将被视为差异。如果您想要其他行为,则需要修改代码。