열 값과 일치하는 두 개의 파일을 병합하고 있습니다. 파일 1의 열 3과 파일 2의 열 4.
나는 이것을 사용했습니다 :
awk 'FNR==NR{a[$3]=$5" "$6" "$7" "$8" "$9;next} ($4 in a) {print $1,$2,$3,$4,a[$3]}' file1 file2
잘못된 결과가 나옵니다.
파일 1:
UTTAR_PRADESH AGRA AGRA_AERO(IAF) OBSY 27 09N 77 58E 0168 1959 yogi NA
UTTAR_PRADESH AGRA AGRA OBSY 27 10N 78 02E 0169 1862 yogi NA
MAHARASHTRA YEOTMAL YEOTMAL OBSY 20 24N 78 09E 0451 1949 yogi NA
ARUNACHAL_PRADESH LOWER_SUBANSIRI ZERO OBSY 27 35N 94 50E 1476 1965 yogi NA
파일 2:
RIGHT UTTAR_PRADESH AGRA AGRA_AERO(IAF) OBSY 403 27 77 18 46 720.3 11.4 1.1 11.7 1.1 7.3 1.0 6.6 0.7 15.0 1.6 53.7 3.2 223.4 11.0 239.3 11.5 116.3 5.0 23.4 1.1 6.4 0.4 5.9 0.5
RIGHT UTTAR_PRADESH AGRA AGRA OBSY 403 27 78 19 45 754.5 12.5 1.2 12.6 1.1 7.7 0.9 8.1 0.7 17.0 1.5 66.5 3.1 209.6 10.4 253.2 11.5 130.5 5.7 24.7 1.2 5.4 0.4 6.8 0.5
RIGHT MAHARASHTRA YEOTMAL YEOTMAL OBSY 314 20 78 09 49 1071.0 15.0 1.0 9.6 0.8 15.8 1.4 12.0 1.2 21.1 1.6 184.4 8.5 286.0 14.1 280.8 13.1 158.5 8.8 54.8 3.0 19.9 0.9 13.1 0.9
RIGHT ARUNACHAL_PRADESH LOWER_SUBANSIRI ZERO OBSY 502 27 94 16 29 1504.7 68.4 4.1 76.7 5.9 81.4 6.8 161.8 11.1 197.6 11.9 221.1 13.9 213.8 13.6 216.2 13.6 148.6 11.2 67.0 4.6 34.1 2.6 18.0 1.2
오류 결과:
RIGHT UTTAR_PRADESH AGRA AGRA_AERO(IAF) 27 10N 78 02E 0169
RIGHT UTTAR_PRADESH AGRA AGRA 27 10N 78 02E 0169
RIGHT MAHARASHTRA YEOTMAL YEOTMAL 20 24N 78 09E 0451
RIGHT ARUNACHAL_PRADESH LOWER_SUBANSIRI ZERO
예상되는 결과:
RIGHT UTTAR_PRADESH AGRA AGRA_AERO(IAF) 27 09N 77 58E 0168
RIGHT UTTAR_PRADESH AGRA AGRA 27 10N 78 02E 0169
RIGHT MAHARASHTRA YEOTMAL YEOTMAL 20 24N 78 09E 0451
RIGHT ARUNACHAL_PRADESH LOWER_SUBANSIRI ZERO 27 35N 94 50E 1476
누군가 내 실수를 지적할 수 있나요?
답변1
두 번째 표현식의 배열에 현재 레코드의 상대 인덱스를 사용해야 합니다. 이는 a[$4]
대신 을 의미합니다 a[$3]
.
awk 'FNR==NR{a[$3]=$5" "$6" "$7" "$8" "$9;next} ($4 in a) {print $1,$2,$3,$4,a[$4]}' file1 file2
RIGHT UTTAR_PRADESH AGRA AGRA_AERO(IAF) 27 09N 77 58E 0168
RIGHT UTTAR_PRADESH AGRA AGRA 27 10N 78 02E 0169
RIGHT MAHARASHTRA YEOTMAL YEOTMAL 20 24N 78 09E 0451
RIGHT ARUNACHAL_PRADESH LOWER_SUBANSIRI ZERO 27 35N 94 50E 1476
공교롭게도 대부분의 행에 동일한 세 번째 및 네 번째 필드가 있으므로 이 예에서는 거의 정확한 결과를 얻을 수 있습니다.