2つのファイルを互いにgrepできますか?

2つのファイルを互いにgrepできますか?

ファイル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を除くすべての文字です。

おすすめ記事