첫 번째 파일의 첫 번째 열과 두 번째 파일의 두 번째 열을 비교하여 일치시킵니다.

첫 번째 파일의 첫 번째 열과 두 번째 파일의 두 번째 열을 비교하여 일치시킵니다.

파일 1: 엑셀 파일(.xls)

UN          ID    St      M1    M2       SE    DOF  PV        PA            FC
17127159    0   -5.9    297.3   765.7   0.22    4   0.003   0.00389231  2.57536
17127163    2   -3.87   189.914 492.307 0.3548  4   0.0179  0.01795     2.59226
17127167    4   -3.8908 339.136 855.276 0.3429  4   0.0176  0.017       2.52192
17127171    6   -3.922  390.44  986.365 0.340   4   0.0172179   0.01721 2.52627
17127175    8   -4.715  536.072 1210.65 0.2492  4   0.00920158  0.00920 2.258

파일 2: 텍스트 파일(.txt)

UNIT_ID   UN      TID        X       E       GG7     J     O
0      17127159 16657436 353.568 335.295 221.717 815.654 684.85
1      17127161 16657436 11.0842 7.01459 7.33511 11.2121 12.6268
2      17127163 16657450 221.647 226.774 136.274 431.32  392.533
3      17127165 16657452 5.02182 3.41172 4.12834 6.90306 4.91183

첫 번째 파일의 첫 번째 열이 두 번째 파일의 두 번째 열과 일치하는 경우 두 번째 파일의 3열부터 9열까지 일치하는 행을 추출하여 첫 ​​번째 파일에 저장합니다.

누가 날 도울 수 있죠?

출력은 새 파일에 저장되어야 합니다.

산출:

UN        ID   St  M1    M2    SE   DOF PV    PA    FC    TID     X  E  GG7  J O
17127159  0   -5.9  297.3   765.7   0.22    4   0.003   0.00389231  2.57536  16657436 353.568 335.295 221.717 815.654 684.85

답변1

해결책 awk:

$ awk 'NR==FNR{a[$2]=$3"\t"$4"\t"$5"\t"$6"\t"$7"\t"$8"\t"$9; next} 
              {
                if($1 in a){
                    print $0,a[$1]
                }
               }' file2 file1
UN          ID    St      M1    M2       SE    DOF  PV        PA            FC TID  X   E   GG7 J   O   
17127159    0   -5.9    297.3   765.7   0.22    4   0.003   0.00389231  2.57536 16657436    353.568 335.295 221.717 815.654 684.85  
17127163    2   -3.87   189.914 492.307 0.3548  4   0.0179  0.01795     2.59226 16657450    221.647 226.774 136.274 431.32  392.533 

설명하다

awk는 각 입력 행을 필드(기본적으로 비어 있음)로 분할하여 첫 번째 필드를 $1두 번째 필드로 만드는 $2식으로 진행됩니다. 특수 변수 NR는 현재 입력 줄 번호이며, 이는 FNR읽고 있는 파일의 현재 줄 번호이기도 합니다. 따라서 여러 파일을 처리하는 경우 첫 번째 파일을 읽을 때만 두 파일이 동일합니다.

  • NR==FNR{a[$2]=$3"\t"$4"\t"$5"\t"$6"\t"$7"\t"$8"\t"$9; next}: 첫 번째 파일을 읽는 경우 필드 3~9(탭으로 연결됨)를 a키가 두 번째 필드인 배열의 값으로 저장합니다. 그런 다음 해당 next라인으로 점프하세요.
  • 이렇게 하면 next스크립트의 나머지 부분이 file2첫 번째 파일( )에 대해 실행되지 않고 두 번째 파일( file1)에 대해서만 실행됩니다.

  • if($1 in a){ print $0,a[$1] }: 이제 두 번째 파일( )에 있습니다 file1. 첫 번째 필드가 a배열 ()의 키로 존재하는 경우 현재 행과 if($1 in a)필드 3 ~ 9에 $0저장된 값을 인쇄합니다.a$1file2

관련 정보