別のファイルにリストされているファイルからパターンを見つける


15

あるファイルにリストされているパターンを見つけ、別のファイルで見つけたい。2番目のファイルには、コンマで区切られたこれらのパターンがあります。

たとえば、最初のファイルF1には遺伝子があります

ENSG00000187546
ENSG00000113492  
ENSG00000166971

2番目のファイルF2には、これらの遺伝子といくつかの列(5列)が必要です。

 region     gene           chromosome  start       end

 intronic   ENSG00000135870 1   173921301   173921301
intergenic  ENSG00000166971(dist=56181),ENSG00000103494(dist=37091) 16 53594504    53594504
ncRNA_intronic  ENSG00000215231 5   5039185 5039185
intronic    ENSG00000157890 15  66353740    66353740

したがって、2番目のファイルにあるENSG00000166971遺伝子は、コンマで区切られた別の遺伝子を持っているため、grepには表示されません。

私のコードは:

grep -f "F1.txt" "F2.txt" >output.txt

それらの値の1つが存在しても、それらの値とそれに関連付けられたデータが必要です。これを行う方法はありますか?


1
grepデフォルトでアンカーの実装がそのパターンを固定することは可能ですか?grep -f <(echo a) <(echo 'a,b')出力は生成されますか?
ジョセフR.

回答:


11

どのバージョンgrepを使用していますか?私はあなたのコードを試して、次の結果を得ました:

$ grep -f file1 file2
ENSG00000187546
ENSG00000113492
ENSG00000166971,ENSG00000186106

一致する結果だけが必要な場合は、grep-oスイッチを使用して、一致するもののみをレポートできます。

$ grep -o -f file1 file2 
ENSG00000187546
ENSG00000113492
ENSG00000166971

grepバージョン

$ grep --version
grep (GNU grep) 2.14
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.

F1.txtの迷走文字?

これをさらにデバッグしている間に、ファイルの2行目の終わりにいくつかの空きスペースがあることに気付きましたF1.txt。を使用して表示できますhexdump

$ hexdump -C ff1
00000000  45 4e 53 47 30 30 30 30  30 31 38 37 35 34 36 0a  |ENSG00000187546.|
00000010  45 4e 53 47 30 30 30 30  30 31 31 33 34 39 32 20  |ENSG00000113492 |
00000020  20 0a 45 4e 53 47 30 30  30 30 30 31 36 36 39 37  | .ENSG0000016697|
00000030  31 0a                                             |1.|
00000032

ASCIIコード20として表示されます。ここで確認できます32 20 20 0a


1
grep --version GNU grep 2.6.3 Copyright(C)2009 Free Software Foundation、Inc.ライセンスGPLv3 +:GNU GPLバージョン3以降< gnu.org/licenses/gpl.html >これはフリーソフトウェアです。変更は自由ですそしてそれを再配布します。法律で許可されている範囲での保証はありません。あなたが言った通りではなく、個人として存在する場合にのみマッチを取得します。奇妙なことに、私が取得している唯一のマッチは、マッチするパターンを含むファイルの最後のパターンです。
ロン

1
私は少ない行を持つものの、私の第二のファイルのより完全なバージョンを貼り付け、およびit.It 2番目のファイルから2番目の行と一致していません探して試してみました
ロン

1
@Ron-問題の原因となっているF1.txtファイル内の文字列の末尾に文字があります。grep(GNU grep)2.5.1
slmで

1
ファイルをテキストラングラーでUnix-LF形式で保存したところ、動作するようになりました。
ロン

2
@Ron-はい、空白の楽しみ8
slm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.