두 파일에서 한 행만 일치시키고 파일 2에서 전체 열을 반환합니다.

두 파일에서 한 행만 일치시키고 파일 2에서 전체 열을 반환합니다.

두 개의 파일이 있는 경우

파일 1:

Reference Position
905894
1197693
3703749
92108275
114940633
114940633

파일 2:

Mapping  Reference Position Type    Length  Reference   Allele  Linkage Zygosity    Count
1 mapping   877831  SNV 1   T   C       Homozygous  48
1 mapping   883625  SNV 1   A   G       Homozygous  23
1 mapping   905894  SNV 1   C   T       Heterozygous    41
1 mapping   909768  SNV 1   A   G       Homozygous  85
1 mapping   1153944 SNV 1   T   G       Heterozygous    65
1 mapping   1197693 SNV 1   G   A       Heterozygous    23
1 mapping   1276973 SNV 1   G   C       Heterozygous    4
1 mapping   1276974 Insertion   4   -   ACAC        Heterozygous    52
1 mapping   1277533 SNV 1   T   C       Homozygous  73

두 파일의 참조 위치를 일치시키고 파일 1과 일치하는 파일 2의 전체 열을 반환하고 싶습니다.

답변1

사용하면 egrep도움이 될 것입니다. 노력하다:

grep -E '(905894|1197693|3703749|92108275|114940633)' file2

제공된 패턴이 나타나는지 확인합니다 file1. 테스트를 해보니 이런 결과가 나왔습니다.

[rkahil@xxxxxx ~]$ grep -E '(905894|1197693|3703749|92108275|114940633)' file2
1 mapping   905894  SNV 1   C   T       Heterozygous    41
1 mapping   1197693 SNV 1   G   A       Heterozygous    23

답변2

숫자를 일치시키려면 grep을 사용하여 행을 반환할 수 있습니다.

$ grep 883625 file2
1 mapping   883625  SNV 1   A   G       Homozygous  23

file2숫자가 포함된 모든 행을 출력하려면 다음을 수행하십시오 file1.

$ grep -f file1 file2
Mapping  Reference Position Type    Length  Reference   Allele  Linkage Zygosity    Count
1 mapping   905894  SNV 1   C   T       Heterozygous    41
1 mapping   1197693 SNV 1   G   A       Heterozygous    23

즉, -fgrep 옵션은 귀하를 검색 file1하고 에서 일치하는 항목을 찾으려고 시도합니다 file2. 여기에서도 제목은 의 첫 번째 줄과 일치합니다 file1. 에서 man grep:

-f FILE, --file=FILE
     Obtain  patterns  from  FILE,  one per line.  The empty file
     contains zero patterns, and therefore matches nothing.  

답변3

grep파일에서 읽기 모드 사용

전체 줄을 file1고정된 문자열 패턴으로 사용할 수 있습니다. 이 옵션은 패턴을 정규식으로 해석하지 않도록 -F지시합니다 . Grep은 선택적으로 한 줄에 하나의 패턴으로 파일을 읽을 수 있습니다. 이것이 바로 우리가 가지고 있는 것이므로 패턴을 파일에서 직접 읽을 수 있습니다.grep
-f

$ grep -F -f file1 file2       
Mapping  Reference Position Type    Length  Reference   Allele  Linkage Zygosity    Count
1 mapping   905894  SNV 1   C   T       Heterozygous    41
1 mapping   1197693 SNV 1   G   A       Heterozygous    23

하위 문자열 일치 방지

위 명령은 file1예를 들어 의 패턴을 사용합니다 905894. file2가 있는 줄이 있으면 처음 6개 문자와 일치하므로 일치합니다9058940 . 905894그건 틀렸어요. 따라서 전체 단어만 일치하도록 만들어야 합니다. 예를 들어 단어의 시작과 끝과 일치하도록 패턴을 변경할 수 있지만 다음 '\b905894\b'grep같은 일반적인 경우에 대한 옵션이 있습니다 -w.

grep -F -w -f file1 file2       

헤더 제외

Reference Position헤더는 두 파일 모두에 표시되므로 헤더를 표시하는 것이 기술적으로 옳더라도 헤더가 필요하지 않습니다 .

를 사용하여 tail -n +2두 번째 줄부터 시작하는 줄을 선택하고 이를 파일 이름으로 사용하여 stdin에서 출력을 -읽습니다 .tail

$ tail -n +2 file1 | grep -F -w -f - file2
1 mapping   905894  SNV 1   C   T       Heterozygous    41
1 mapping   1197693 SNV 1   G   A       Heterozygous    23

Bash에서는 거의 동일합니다.

grep -F -w -f <(tail -n +2 file1) file2

관련 정보