다른 파일의 기준에 따라 한 파일에서 행을 선택하는 방법은 무엇입니까?

다른 파일의 기준에 따라 한 파일에서 행을 선택하는 방법은 무엇입니까?

저는 2개의 유전자 데이터세트를 갖고 있는데, 둘 다 염색체 위치 열을 갖고 있습니다. 각 행의 염색체 위치를 파일 2의 염색체 위치와 비교하여 파일 1을 필터링하려고 합니다. File 1 행은 File 2의 모든 행에서 주어진 염색체 위치에 대해 File 2보다 염색체 위치가 5000 이상 5000 이상 작은 행만 선택하는 조건으로 추출됩니다. 궁극적으로 저는 파일 1에서 추출된 유전자 변이가 파일 2의 유전 변이와 5000 +/-보다 큰 거리를 갖도록 노력하고 있습니다.

예를 들어 내 데이터는 다음과 같습니다.

파일 1:

Variant   Chromosome Position
Variant1    14000
Variant2    9000
Variant3    37000
Variant4    21000

파일 2:

Variant   Chromosome Position
Variant1    10000
Variant2    20000
Variant3    30000

예상 출력(파일 2의 각 줄과 비교하여 위치 거리가 5000보다 큰 변형):

Variant   Chromosome Position
Variant3    37000

2개의 파일에서 데이터를 추출하는 중에 문제가 발견됐는데, 매칭이냐 취소냐에 따라 달라집니다. 내 문제에 +/- 조건을 적용하는 항목을 찾지 못했고 다른 곳에서 보거나 배울 수 있는지 잘 모르겠습니다. 저는 Linux를 처음 접했기 때문에 다음과 같은 효과가 있는 명령을 작성하려고 노력해 왔습니다.

awk 'BEGIN{FS=OFS="\t"} FNR==1{print;next} {if($2>=+5000 | $2<=-5000) print $0}' file1 file2 > newfile

하지만 작동시키는 구문이 확실하지 않습니다. 도움이나 지침을 주시면 대단히 감사하겠습니다.

답변1

이것도 시도해 보십시오(범위 사이의 "구멍"을 고려하십시오).

$ awk '
NR == FNR       {RGMIN[++IX] = $2 - 5000                        # from file2, create min and
                 RGMAX[IX]   = $2 + 5000                        # max range boundaries
                 next
                }
FNR == 1        {print                                          # print file1 header; don't process line further
                 next
                }
                {PR = 1                                         # set PRintout logical variable

                 for (i=2; i<=IX; i++)  PR = PR * ($2 < RGMIN[i] || $2 > RGMAX[i])

                                                                # reset PR to 0 if $2 inside any of the
                                                                # ranges; skip file2's header by starting
                                                                # loop at IX 2

                }
PR                                                              # print if outside ALL ranges
' file2 file1
Variant   Chromosome Position
Variant3    37000

관련 정보