줄이 다른 두 개의 파일이 있습니다. 파일 1에는 860줄이 있고 파일 2에는 650,000줄이 있습니다.
파일 1
chr start End CM
1 0 2000 p3.5
1 2400 8000 p5.3
2 9500 20000 q2.4
3 0 3000 p7.6
4 60800 89000 p77.1
8 12000 36000 q4.5
8 55000 78000 p22.4
파일 2
chr pos
1 1500
2 10500
4 70000
8 13000
파일 1의 열 2와 열 3 사이에 있는 경우 파일 2의 각 항목을 비교하고 싶습니다(열 1도 확인해야 함(두 파일 모두의 문자)). 일치하면 그에 따라 열 1과 열 2를 인쇄해야 합니다. 파일 2와 파일 1의 열 4.
원하는 출력:
chr pos CM
1 1500 p3.5
2 10500 q2.4
4 70000 p77.1
8 13000 q4.5
당신의 도움을 주셔서 감사합니다
답변1
가장 쉬운 방법은 정렬한 다음 정렬된 목록을 구문 분석하는 것 같습니다.
cat file1 file2 |
sort -k1,1n -k2,2n |
awk 'NF==4{c=$1; lo=$2; hi=$3; cm=$4}
NF==2 && c==$1 && lo<=$2 && hi>=$3{printf "%s\t%s\t%s\n", $1, $2, cm}'
숫자로 그리고 순차적으로 배열된 조합 cat
목록을 생성합니다.sort
chr
pos
chr pos
chr start End CM
1 0 2000 p3.5
1 1500
1 2400 8000 p5.3
2 9500 20000 q2.4
2 10500
3 0 3000 p7.6
4 60800 89000 p77.1
4 70000
8 12000 36000 q4.5
8 13000
8 55000 78000 p22.4
awk
파일을 한 번 살펴보고 행에 도달할 chr
때마다 , 및 의 새 값을 선택 lo
하고 조건에 따라 해당 행만 테스트하십시오.hi
cm
NF==4
NF==2
1 1500 p3.5
2 10500 q2.4
4 70000 p77.1
8 13000 q4.5
및 650,000줄의 테스트 파일
real 0m1.511s
user 0m1.249s
sys 0m0.477s