パターンファイルを使用するGrapの問題

パターンファイルを使用するGrapの問題

次の問題が発生しました(質問をするために単純化しました)。次のスキーマファイルがありますpatternfile.txt

ALNTPKDHI  
CTDDNALAY  
CTDDNALAYY

およびルックアップファイルlookup.txt

ALNTPKDHI 1  
CTDDNALAY 2  
CTDDNALAYY 3

次のコマンドを実行します。

$ grep -w -f patternfile.txt lookupfile.txt

次を返します。

ALNTPKDHI 1  
CTDDNALAY 2

3番目の項目は一致するものを返す必要がありますが、一致するものは返しません。最後の2つの項目の順序を変更すると、patternfile.txt3つの項目がすべて返されます。

誰でもこれを説明できますか?

ありがとうございます!

答え1

再現できません。

$ printf '%s\n' ALNTPKDHI CTDDNALAY CTDDNALAYY > patterns.txt
$ printf '%s\n' 'ALNTPKDHI 1' 'CTDDNALAY 2' 'CTDDNALAYY 3' > input.txt
$ grep -w -f patterns.txt input.txt 
ALNTPKDHI 1
CTDDNALAY 2
CTDDNALAYY 3

パターンや入力に、異常な制御文字やキャリッジリターンなどの空白文字が含まれていることを確認してください。

答え2

スキーマファイルの最後の行が不完全な場合、つまり最後の行が改行で終わらない場合にのみ表示される内容を再現できます。行が不完全な場合はgrep使用されません。

ファイルを実行すると、od -c最後の文字が何であるかを確認できます。以下は最後の行の例です。いいえ改行文字で終わります。

$ od -c pattern.txt
0000000    A   L   N   T   P   K   D   H   I  \n   C   T   D   D   N   A
0000020    L   A   Y  \n   C   T   D   D   N   A   L   A   Y
0000035

以下は、ファイルが改行文字で終わる場合の例です。

$ od -c pattern.txt
0000000    A   L   N   T   P   K   D   H   I  \n   C   T   D   D   N   A
0000020    L   A   Y  \n   C   T   D   D   N   A   L   A   Y  \n
0000036

次のコマンドを使用してファイルに改行を追加できます。

echo >>pattern.txt

ほとんどのテキストエディタは、最初に改行がない場合、ファイルを保存すると、テキストの最後の行に終了行の改行を自動的に追加します。

関連情報