grep -f パターンファイル パターンファイルの内容によっては何も見つからないか、あまりにも多く見つかりません。

grep -f パターンファイル パターンファイルの内容によっては何も見つからないか、あまりにも多く見つかりません。

grepパターンリストを含む行に対してできるだけ多くの解決策を検索し、読み込もうとした後、この記事を書いています。これは私が知っていて、多くのフォーラムに参加した非常に基本的なものです。

しかし、次のような問題があります。 2つのファイルがあり、大きなファイルから小さなファイルのパターンに一致する行を取得したいと思います。

file_A.txt(一致するパターンの単一列のリスト)があります。たとえば、次のようになります。

comt241_c0_seq1
comt868_c0_seq1
comt685_c0_seq1
comt7977_c0_seq1
comt6723_c0_seq1
comt363_c0_seq1
comt384_c0_seq1

別のfile_B.txt(タブで区切られ、file_Aよりも項目が多い)

comp5_c0_seq1   0   0   0   6   0   0   0   0   0
comt241_c0_seq1 0   0   0   0   0   0   0   0   0
comt868_c0_seq1 0   0   0   0   0   0   0   0   0
comt363_c0_seq1 0   0   0   0   0   0   0   0   0
comt384_c0_seq1 0   0   0   0   0   0   0   0   0
comp429_c0_seq1 0   0   0   0   0   0   0   0   0
comp452_c0_seq1 0   0   0   0   0   0   0   0   0
comp452_c0_seq2 0   0   0   0   0   0   0   0   0
comp483_c0_seq1 33  8   10  32  0   33  8   0   37
comt685_c0_seq1 0   0   0   0   0   0   0   0   0
comp494_c0_seq1 0   0   0   0   0   0   0   0   0
comt7977_c0_seq1    1   0   0   0   0   0   0   0   0
comp564_c0_seq1 0   0   0   0   0   0   0   0   0
comp596_c0_seq1 0   0   0   0   0   0   0   0   0
comp653_c0_seq1 10  0   0   2   0   0   0   0   0
comp724_c0_seq1 0   0   0   0   0   0   0   0   0
comt6723_c0_seq1    0   0   0   0   0   0   0   0   0

頑張ったgrep -f file_A file_B > file_C

ただし、空のファイルを返します。

そのため、次のコマンドを使用して、file_Aからすべてのスペースを削除しました。

sed 's/[ \t]*$//' file_A > new_file_A

しかし、成功しませんでした。特殊文字やスペースを削除し、ファイルを正しく区切るために多くの努力をしましたが、追加の項目が提供されたり、何も提供されません。

file_Aやfile_Bに特殊文字があるようですが、これが問題だと思います。テキストマネージャエディタを使用しています。

grep以外に他の方法はありませんか?

答え1

grepコマンドが正しいようです。他のファイル名を使用しない限り:

grep -f list_A list_B

変える

~$ grep -f fileA.txt fileB.txt
comt241_c0_seq1 0   0   0   0   0   0   0   0   0
comt868_c0_seq1 0   0   0   0   0   0   0   0   0
comt363_c0_seq1 0   0   0   0   0   0   0   0   0
comt384_c0_seq1 0   0   0   0   0   0   0   0   0
comt685_c0_seq1 0   0   0   0   0   0   0   0   0
comt7977_c0_seq1    1   0   0   0   0   0   0   0   0
comt6723_c0_seq1    0   0   0   0   0   0   0   0   0

答え2

同じ内容で2つのファイルを作成し、grep同じ方法で使用しましたが、うまくいきました。同じファイル名を使用してください(質問に.txt拡張子が見つからないようです)。

[sreeraj@server ~]$ grep -f file_A.txt file_B.txt > file_C.txt
[sreeraj@server ~]$ cat file_C.txt
comt241_c0_seq1 0   0   0   0   0   0   0   0   0
comt868_c0_seq1 0   0   0   0   0   0   0   0   0
comt363_c0_seq1 0   0   0   0   0   0   0   0   0
comt384_c0_seq1 0   0   0   0   0   0   0   0   0
comt685_c0_seq1 0   0   0   0   0   0   0   0   0
comt7977_c0_seq1    1   0   0   0   0   0   0   0   0
comt6723_c0_seq1    0   0   0   0   0   0   0   0   0
[sreeraj@server ~]$

dos2unixこれら2つのファイル名がまだ空のファイルを生成する場合は、そのファイルを試してみてください。

dos2unix file_A.txt
dos2unix file_B.txt

関連情報