파일 1(상위)
2210 1110 Earth
2211 1111 Marse
2212 1112 Saturn
2213 1113 Pluto
파일 2(하위)
3310 2210 Earth
3311 2210 Space
3312 2211 Mars
3313 2211 Space
3314 2212 Saturn
3315 2212 Space
3316 2213 Pluto
3317 2213 Space
예상되는
3310 2210 Earth
3311 2210 Earth
3312 2211 Mars
3313 2211 Mars
3314 2212 Saturn
3315 2212 Saturn
3316 2213 Pluto
3317 2213 Pluto
따라서 파일 2의 $2를 파일 1의 $1과 비교한 다음 파일 2의 $3 값을 파일 2의 $3과 동일하게 설정해야 합니다.
답변1
$ awk 'FNR==NR {planet[$1]=$3; next} {$3=planet[$2]; print}' file1 file2
3310 2210 Earth
3311 2210 Earth
3312 2211 Marse
3313 2211 Marse
3314 2212 Saturn
3315 2212 Saturn
3316 2213 Pluto
3317 2213 Pluto
FNR==NR
"첫 번째 파일을 구문 분석할 때"를 의미하는 관용어 입니다awk
.next
첫 번째 파일의 나머지 코드가 실행되지 않도록 하려면 이 조건의 작업을 종료해야 합니다 .행성 필드는 해시 배열에 저장되며 두 번째 파일을 읽는 동안 이를 마지막 필드에 할당합니다.
답변2
파일이 모두 조인 필드( 의 첫 번째 필드 file1
와 의 두 번째 필드 file2
)에서 사전순으로 정렬되어 있다고 가정합니다.
$ join -1 1 -2 2 -o 2.1,2.2,1.3 file1 file2
3310 2210 Earth
3311 2210 Earth
3312 2211 Marse
3313 2211 Marse
3314 2212 Saturn
3315 2212 Saturn
3316 2213 Pluto
3317 2213 Pluto
-1 1 -2 2
첫 번째 파일의 첫 번째 필드와 두 번째 파일의 두 번째 필드( )를 사용하여 두 파일 간의 관계형 JOIN 연산을 수행합니다. 출력은 options 를 사용하여 지정됩니다 -o
. 위 명령에서는 2.1,2.2,1.3
두 번째 파일의 첫 번째 및 두 번째 필드를 제공하고 그 뒤에 첫 번째 파일의 세 번째 필드를 제공합니다.