한 파일에서 다른 파일로 나열된 패턴 찾기


15

한 파일에 나열된 패턴을 찾아 다른 파일에서 찾고 싶습니다. 두 번째 파일에는 쉼표로 구분 된 패턴이 있습니다.

예를 들어 첫 번째 파일 F1에는 유전자가 있습니다

ENSG00000187546
ENSG00000113492  
ENSG00000166971

두 번째 파일 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

따라서 두 번째 파일에있는 ENSG00000166971 유전자는 쉼표로 구분 된 다른 유전자가 있으므로 grep에 표시되지 않습니다.

내 코드는 다음과 같습니다

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

그 값 중 하나가 있고 그와 관련된 데이터가 있더라도 그 값을 원합니다.이를 수행 할 방법이 있습니까?


1
구현이 grep기본적으로 패턴 을 앵커 할 수 있습니까? grep -f <(echo a) <(echo 'a,b')출력을 생성 합니까 ?
Joseph R.

답변:


11

어떤 버전 grep을 사용하고 있습니까? 코드를 시도한 결과는 다음과 같습니다.

$ grep -f file1 file2
ENSG00000187546
ENSG00000113492
ENSG00000166971,ENSG00000186106

일치하는 결과 만 원하는 경우 grep-o스위치를 사용하여 일치하는 항목 만보고 할 수 있습니다 .

$ grep -o -f file1 file2 
ENSG00000187546
ENSG00000113492
ENSG00000166971

그렙 버전

$ 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에서 삐걱 거리는 문자?

이것을 더 디버깅하는 동안 나는 파일의 두 번째 줄 끝에 여러 가지 흩어진 공간을 발견했다 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 > 이것은 무료 소프트웨어입니다 : 자유롭게 변경할 수 있습니다 : 재분배하십시오. 법이 허용하는 범위까지는 보증이 없습니다. 나는 그들이 개인적으로 존재하고 당신이 말한 것이 아닌 경우에만 일치를 얻습니다. 이상하게, 내가 얻는 유일한 일치는 일치시킬 패턴이 들어있는 파일의 마지막 패턴입니다.
Ron

1
행 수가 적더라도 두 번째 파일의 더 완전한 버전을 붙여넣고 검색을 시도했습니다. 두 번째 파일의 두 번째 행과 일치하지 않습니다
Ron

1
@Ron-문제를 일으키는 F1.txt 파일의 문자열 끝에 길 잃은 문자가 있습니다. grep (GNU grep) 2.5.1
slm

1
방금 파일을 텍스트 랭글러에 Unix-LF 형식으로 저장했는데 이제 작동합니다!
Ron

2
@ 론-예 공백의 재미 8-)
slm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.