Com zsh
, você pode tentar algo como:
x=3
B_words=($(<B))
A_words=($(<A))
A="$A_words"
setopt extendedglob
for ((i = 1; i<=$#B_words - x + 1; i++)) {
phrase=$B_words[i,i+x-1]
[[ " $A " = (#a2)*" $phrase "* ]] && printf '%s\n' $phrase
}
Qual deve dar-lhe as seqüências de 3 palavras do arquivo B que também são encontradas no arquivo A (permitindo 2 erros com (#a2)
).
Por exemplo, se A
for sua pergunta e B
for a sentença acima, recebo:
of 3 words
3 words of
in file A
Ou se você quiser ver o que foi correspondido no arquivo A
:
for ((i = 1; i<=$#B_words - x + 1; i++)) {
phrase=$B_words[i,i+x-1]
[[ " $A " = (#a2)(#b)*" "($phrase)" "* ]] &&
printf '%s\n' "$phrase ($match[1])"
}
que dá:
of 3 words (of words)
3 words of (words of)
in file A (in file B,)
palavras aqui são definidas como sequências de caracteres não-IFS que com o valor padrão de $ IFS é qualquer caractere diferente de espaço, tabulação, nova linha e nul.