두 개의 파일이 있는 경우
파일 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
즉, -f
grep 옵션은 귀하를 검색 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