计算单词bash之间的差异

时间:2016-11-17 10:58:05

标签: bash string-comparison

我正在尝试使用bash脚本来计算两个单词之间的差异,并删除它们之间少于2个不同字符的单词。

示例输入文件:

hello
heggo
helloso
good
god
face
fake
rage

输出结果为:

hello
heggo
helloso
rage

输入文件已经格式化为按字母顺序排列,小写字母,每行只有一个单词。

丢弃的单词是:

好 - 只有一个与上帝不同的字母,只有一个额外的“O”

上帝 - 同样好的

面部 - 只有C与其他单词不同。

假 - 只有K与其他单词不同。

¿有任何想法来解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

这应该根据您的描述和评论工作。 因为有两个oo,所以也会保留“好”这个词。 通常,任何位置都会有两个相同字母的单词。

datasource=$(cat b.txt)
newdata=""
while IFS='' read -r line; do
found=0
readarray word < <(echo "$line" |fold -w1) #splits each line in a char array
    for eachletter in ${word[@]}; do
        found=$(echo "$line" | grep -o $eachletter |wc -w)
        if [[ $found -ge 2 ]] && [[ ${newdata[@]} != *"$line"* ]]; then 
            newdata+=( "$line" )
        fi
    done
unset word eachletter found
done <<< "$datasource"
echo -e "New Data \n" 
printf '%s\n' ${newdata[@]} # >newfile.txt