파일이 두 개 있어요
파일 1:
U 20 100 1_A 1_A
U 14 200 1_B 1_B
U 14 300 1_C 1_C
파일 2:
D 12 90 1_A 1_A
D 15 97 1_A 1_A
D 16 99.5 1_A 1_A
D 9 111 1_A 1_A
D 71 200 1_B 1_B
D 88 198 1_B 1_B
D 12 210 1_B 1_B
D 11 211 1_B 1_B
D 9 266 1_C 1_C
D 18 278 1_C 1_C
D 20 300.5 1_C 1_C
D 17 300 1_C 1_C
4열에는 두 파일의 동일한 값이 포함되어 있지만(5열도 4열과 동일) file1에서는 각 값이 한 번만 나타나는 반면, file2에서는 각 값이 여러 번 나타나지만 2열은 3열과 다릅니다. .
세 번째 열의 값이 file2의 해당 행(네 번째 열의 값이 동일함)의 ±1 내에 있는 file2에서 행을 가져오고 싶습니다.
예상 출력:
D 16 99.5 1_A
D 71 200 1_B
D 20 300.5 1_C
D 17 300 1_C
이것을 사용해 보세요:
while read c1 c2 c3 c4
do
awk '{if ( a = $4 && b < $3+1 && b > $3-1 ) print $1 " " $2 " " $3 " " $5 }' a="$c4" b="$c3" file2.txt > output.txt
done < file1.tx
나는 다음과 같은 결과를 얻었습니다.
D 20 300.5 1_C
D 17 300 1_C
따라서 마지막 행의 b 값만 사용합니다.
답변1
만 사용앗쉘 루프가 필요하지 않습니다.
awk 'NR==FNR{ col4[$4]=$3; next }
(-1< col4[$4]-$3 && col4[$4]-$3 <1) { print $1, $2, $3, $5 }' file1 file2
세 번째 열 값에 ±1을 더하고 해당 쌍과 비교하는 대신 두 숫자를 뺀 결과가 정확히 (-1,1) 범위 내에 있는지 확인해야 합니다.
차이를 [-1,1] 범위에 두려면 다음을 수행하십시오.
awk 'NR==FNR{ col4[$4]=$3; next }
(-1<= col4[$4]-$3 && col4[$4]-$3 <=1) { print $1, $2, $3, $5 }' file1 file2