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