두 번째 열의 일치를 기반으로 열 추가

두 번째 열의 일치를 기반으로 열 추가

두 개의 파일이 있습니다. 첫 번째 파일의 형식은 다음과 같습니다.

10D0325 2465 0 0 -9 -9
10D0598 2567 0 0 -9 -9
10D0562 2673 0 0 -9 -9
10D0175 2457 0 0 -9 -9
10D0241 2209 0 0 -9 -9
10D0954 2312 0 0 -9 -9
10D0446 2489 0 0 -9 -9

두 번째 파일의 형식은 다음과 같습니다.

10D0325 1
10D0598 1
10D0175 2
10D0954 1
10D0446 2

내가 원하는 것은 ID 변수를 기반으로 두 번째 파일의 두 번째 열을 첫 번째 파일에 추가하는 것입니다. 보시다시피, 첫 번째 열은 첫 번째 데이터 세트를 두 번째 데이터 세트와 일치시키는 식별자 변수로 사용될 수 있습니다. 그러나 첫 번째 파일에는 두 번째 파일에 없는 일부 행/ID가 포함되어 있습니다. 따라서 단순히 두 파일을 모두 주문하고 이 열을 첫 번째 파일에 붙여넣을 수는 없습니다.

이를 수행하는 매우 쉬운 방법이 있을 것입니다. 불행히도 제 Linux 기술은 제한되어 있습니다.

PS 명확성을 위해 생성된 파일의 모양은 다음과 같습니다(공백 대신 누락을 나타내는 데 다른 기호를 사용할 수 있음).

10D0325 2465 0 0 -9 -9 1
10D0598 2567 0 0 -9 -9 1
10D0562 2673 0 0 -9 -9
10D0175 2457 0 0 -9 -9 2
10D0241 2209 0 0 -9 -9
10D0954 2312 0 0 -9 -9 1
10D0446 2489 0 0 -9 -9 2

답변1

사용 join:

join -j 1 -a 1 <(sort file1) <(sort file2)
  • -j 1: 연결 필드가 첫 번째입니다.
  • -a 1: 파일 1에서 페어링할 수 없는 줄을 인쇄합니다.
  • sort:파일을 추가하려면 먼저 정렬해야 합니다.

답변2

그것은 간단합니다 awk:

awk 'NR==FNR{a[$1]=$2;next}{print $0,a[$1]}' file2 file1

a먼저(file2를 읽을 때) 첫 번째 열로 인덱싱된 file2의 두 번째 열을 저장하기 위한 배열을 만듭니다 . 그런 다음 file1을 인쇄하고 배열에 값을 추가합니다.

관련 정보