ファイルBのすべてのフレーズに対してファイルAをgrepしたいと思います。ここで、フレーズは長さXの単語文字列です。理想的には agrep と同様に grep に似ています。コマンドラインツールを使用してこれを行う方法はありますか?
ベストアンサー1
を使用して、次のことをzsh
試すことができます。
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
}
これにより、ファイルAにもあるファイルBの3つの単語シーケンスが提供されます(2つのエラーを許可(#a2)
)。
たとえば、A
あなたの質問がB
上記の文であれば、次のような結果が得られます。
of 3 words
3 words of
in file A
または、ファイルにどの一致があるかを確認するには、次の手順を実行します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])"
}
これは作る:
of 3 words (of words)
3 words of (words of)
in file A (in file B,)
性格ここで、非IFS文字シーケンスとして定義されているデフォルト値$ IFSは、スペース、タブ、改行、およびnulを除くすべての文字です。