파일 2의 필드 > x인 파일 1의 행을 선택합니다.

파일 2의 필드 > x인 파일 1의 행을 선택합니다.

다음과 같은 많은 정보가 포함된 대용량 파일 file1이 있습니다.

rs969931    C   A   1.993   1.189   1.003 ..............
rs2745406   C   T   1.993   1.166   1.003 ..............
rs6939431   A   G   0.003   0.207   0.005 ..............
rs1233427   A   G   1.990   1.150   1.001 ..............

두 번째 파일 file2에는 이 정보의 품질이 포함되어 있으며, 여기서 파일 2의 라인 N 값은 파일 1의 라인 N의 품질에 해당합니다.

0.19893
0.94752
0.93768
0.47781

내가 원하는 것은 파일 2 > 0.5인 파일 1에서 행을 선택하는 것입니다. 내가 찾을 수 있는 가장 가까운 것은 ID 일치 문제입니다(다른 파일에 ID가 나열된 텍스트 파일에서 줄 선택), 여기서는 파일 2의 값을 사용하여 몇 가지 논리 연산을 수행해야 합니다.

대용량 파일에 대해 여러 작업을 수행해야 할 수 있으므로 파일 2를 파일 1에 추가한 다음 필터링 후 제거하는 등의 번거로운 솔루션을 피하십시오.

답변1

paste qual.txt data.txt | awk '$1 > 0.5'

이는 먼저 품질 값을 첫 번째 열로 포함하고 다른 데이터를 다른 열로 포함하는 데이터를 생성하는 데 사용됩니다 paste. 이 awk코드는 단순히 첫 번째 열(품질)이 0.5보다 큰 행을 선택하여 인쇄합니다.

출력 품질을 원하지 않는 경우:

paste qual.txt data.txt | awk '$1 > 0.5' | cut -f 2-

주어진 예에서 이것은 생성됩니다

rs2745406   C   T   1.993   1.166   1.003 ..............
rs6939431   A   G   0.003   0.207   0.005 ..............

답변2

그리고 awk그리고 getline(참조getline에 대한 모든 것경고하다)

$ # can also use: awk '{getline num < "file2"} num>0.5' file1
$ awk -v cmp_f='file2' '{getline num < cmp_f} num>0.5' file1
rs2745406   C   T   1.993   1.166   1.003 ..............
rs6939431   A   G   0.003   0.207   0.005 ..............
  • getline num < cmp_ffile2에서 까지 행 저장num
  • num>0.5file1조건이 충족되면 라인 인쇄


다음 버전이 더 좋을 것 같아요

awk '(getline num < "file2")>0 && num>0.5' file1

관련 정보