2016-11-17 9 views
-1

Я пытаюсь выполнить скрипт bash, чтобы подсчитывать различия между двумя словами и удалять эти слова с менее чем двумя разными символами между ними.подсчет различий между словами bash

Пример входного файла:

hello 
heggo 
helloso 
good 
god 
face 
fake 
rage 

Выход будет:

hello 
heggo 
helloso 
rage 

Входные файлы уже отформатированы для сортировки alphabetticaly строчными буквами и только одно слово в каждой строке.

Отброшенные слова:

Хорошо -Только одно отличие письмо от бога, только дополнительный «O»

Бог - То же, что хороший

Face - только C отличается от других слова.

Fake - только K отличается от других слов.

¿Любая идея справиться с этим?

+4

Вы писали код? – anubhava

+0

Вы сравниваете каждое слово со всеми другими словами? – 123

+0

Нет, у меня нет никакой подсказки, чтобы справиться с этим – Carlimedes

ответ

0

Это должно работать согласно вашему описанию и комментариям. Слово «хорошо» также будет сохранено, так как имеет два оо. Обычно любое слово с двумя одинаковыми буквами в любом положении будет сохранено.

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