grep을 사용하여 서로 다른 두 파일의 필드를 일치시킬 수 있습니까? 예를 들어, file1이 있는 경우 두 파일의 POS 필드를 일치시키고 싶습니다. macth가 있으면 일치하는 행만 출력합니다.
1 10366 rs58108140 G A
1 51954 rs185832753 G C
파일 1
#CHROM POS ID REF ALT QUAL
1 10366 rs58108140 G A
1 10611 rs189107123 C G
1 51954 rs185832753 G C
1 13327 rs144762171 G C
1 13957 . TC T 28
1 13980 rs151276478 T C
파일 2
#CHROM POS ID REF ALT QUAL
1 10366 rs58108140 G A
1 51935 rs181754315 C T
1 51954 rs185832753 G C
1 52058 rs62637813 G C
1 52144 rs190291950 T A
1 52238 rs150021059 T G
1 54353 rs140052487 C A
답변1
grep에서는 그렇게 할 수 없습니다. 패턴을 입력으로 사용하여 파일을 검색할 수 있지만 grep
파일에서 특정 필드를 지정할 수는 없습니다. 따라서 두 번째 위치만 일치시키려면 다음과 같은 것이 필요합니다.
$ awk '{ if(NR==FNR){a[$2]=$0}else{if($2 in a){print}}}' file1.vcf file2.vcf
#CHROM POS ID REF ALT QUAL
1 10366 rs58108140 G A
1 51954 rs185832753 G C
물론 위치는 동일하지만 변이가 다른 염색체에 있는 경우도 인쇄됩니다. 이것이 귀하의 질문에서 요구하는 것이지만 chr과 pos의 고유한 조합을 찾는 것이 더 합리적일 수 있습니다.
$ awk '{ if(NR==FNR){a[$1$2]=$0}else{if($1$2 in a){print}}}' file1.vcf file2.vcf
#CHROM POS ID REF ALT QUAL
1 10366 rs58108140 G A
1 51954 rs185832753 G C
이를 수행하려면 grep
먼저 POS 필드를 새 파일로 추출해야 합니다.
awk '{print $2}' file1.vcf > file3
$ cat file3
POS
10366
10611
51954
13327
13957
13980
이제 이 파일을 다음 콘텐츠와 함께 사용하세요 grep
.
$ grep -f file3 file2.vcf
#CHROM POS ID REF ALT QUAL
1 10366 rs58108140 G A
1 51954 rs185832753 G C
그러나 그것은 정말로 좋은 생각이 아닙니다. 예를 들어 1103668 since
10366 1103668` is a substring of
과 일치하는 항목 도 찾습니다 .
마지막으로 이것이 두 개의 유효한 vcf 파일이라고 가정하면(귀하의 예는 그렇지 않음) bedtools intersect
.
답변2
사용 grep
:
$ grep -Fof file1 file2
#CHROM POS ID REF ALT QUAL
1 10366 rs58108140 G A
1 51954 rs185832753 G C
-F
정규식 대신 고정 문자열 사용-o
일치하는 항목만 인쇄-f file1
모든 패턴/고정 문자열을 한 줄에 하나씩 검색합니다.file1
file2
다음에서 파일 검색
대체 용도 awk
:
awk '
NR==FNR{s[$0]=1}
NR!=FNR && s[$0]
' file1 file2
답변3
"일치" 줄(필드 사이의 공간 크기 포함)의 일부가 두 파일 간에 변경될 수 있다면 join
더 나은 도구가 될 것입니다 .
sort -n -k 2 < file1 > sort1
sort -n -k 2 < file2 > sort2
join --header -1 2 -2 2 -o '1.1 1.2 1.3 1.4 1.5' sort1 sort2
입력을 (공개 필드에서) 정렬해야 하기 때문에 이러한 sort
단계가 필요합니다 .join
결과:
#CHROM POS ID REF ALT
1 10366 rs58108140 G A
1 51954 rs185832753 G C