다음과 같은 많은 정보가 포함된 대용량 파일 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_f
file2
에서 까지 행 저장num
num>0.5
file1
조건이 충족되면 라인 인쇄
다음 버전이 더 좋을 것 같아요
awk '(getline num < "file2")>0 && num>0.5' file1