문자열 일치를 사용하여 두 파일 간에 텍스트 줄 복사

문자열 일치를 사용하여 두 파일 간에 텍스트 줄 복사

도움을 구하면서 두 개의 파일이 있습니다. 하나는 다양한 이름이 포함된 큰 목록이고 다른 하나는 좌표입니다. 두 파일의 각 줄은 8비트 코드로 시작됩니다. File1에서 8비트 라인 코드를 찾고 File2의 일치하는 모든 라인 코드에 라인 내용을 복사하고 싶습니다.

(파일 1) 해시/이름은 한 번만 나타납니다.

136667ED ap1_01_a_ap1_01_rails_07
035B337C ap1_01_a_arrows_005
79546F82 ap1_01_a_centreline_010
0E1D31E7 prop_bush_med_02

(파일 2) 일부는 0E1D31E7과 같이 좌표가 다른 여러 개의 해시 복사본을 가지고 있습니다.

136667ED -1294.6945,-2376.0317,21.8279
035B337C -1314.6719,-2721.7378,12.9467
79546F82 -1283.1066,-2529.9771,12.9635
0E1D31E7 1919.4160,-1814.3889,160.5210
0E1D31E7 1919.9885,-2628.2529,0.7537  
0E1D31E7 192.0235,-2603.1790,4.9978   
0E1D31E7 192.1050,4950.3540,389.4736

8비트 코드/이름을 일치하는 파일 2의 코드 줄에 복사하는 방법은 다음과 같습니다.

136667ED -1294.6945,-2376.0317,21.8279  136667ED ap1_01_a_ap1_01_rails_07  
035B337C -1314.6719,-2721.7378,12.9467  035B337C ap1_01_a_arrows_005       
79546F82 -1283.1066,-2529.9771,12.9635  79546F82 ap1_01_a_centreline_010   
0E1D31E7 1919.4160,-1814.3889,160.5210  0E1D31E7 prop_bush_med_02          
0E1D31E7 1919.9885,-2628.2529,0.7537    0E1D31E7 prop_bush_med_02          
0E1D31E7 192.0235,-2603.1790,4.9978     0E1D31E7 prop_bush_med_02          
0E1D31E7 192.1050,4950.3540,389.4736    0E1D31E7 prop_bush_med_02          

반복되는 시작으로 텍스트 줄 연결

작동할 수도 있지만 이러한 명령을 실행하는 방법을 모르겠습니다. 나는 창문을 사용하고 있습니다.

답변1

입력을 기반으로 paste표준 출력 명령을 사용한 출력은 다음과 같습니다.

$ paste File1 File2
136667ED ap1_01_a_ap1_01_rails_07   136667ED -1294.6945,-2376.0317,21.8279
035B337C ap1_01_a_arrows_005    035B337C -1314.6719,-2721.7378,12.9467
79546F82 ap1_01_a_centreline_010    79546F82 -1283.1066,-2529.9771,12.9635

대용량 파일이 있으므로 paste File1 File2 > mergedfile.

답변2

join프로세스 대체를 이해하는 쉘을 사용하십시오 .

$ join <(sort file2) <(sort file1)
035B337C -1314.6719,-2721.7378,12.9467 ap1_01_a_arrows_005
0E1D31E7 1919.4160,-1814.3889,160.5210 prop_bush_med_02
0E1D31E7 1919.9885,-2628.2529,0.7537 prop_bush_med_02
0E1D31E7 192.0235,-2603.1790,4.9978 prop_bush_med_02
0E1D31E7 192.1050,4950.3540,389.4736 prop_bush_med_02
136667ED -1294.6945,-2376.0317,21.8279 ap1_01_a_ap1_01_rails_07
79546F82 -1283.1066,-2529.9771,12.9635 ap1_01_a_centreline_010

또는 출력 중간에 조인 필드를 복사합니다.

$ join -o0,1.2,0,2.2 <(sort file2) <(sort file1)
035B337C -1314.6719,-2721.7378,12.9467 035B337C ap1_01_a_arrows_005
0E1D31E7 1919.4160,-1814.3889,160.5210 0E1D31E7 prop_bush_med_02
0E1D31E7 1919.9885,-2628.2529,0.7537 0E1D31E7 prop_bush_med_02
0E1D31E7 192.0235,-2603.1790,4.9978 0E1D31E7 prop_bush_med_02
0E1D31E7 192.1050,4950.3540,389.4736 0E1D31E7 prop_bush_med_02
136667ED -1294.6945,-2376.0317,21.8279 136667ED ap1_01_a_ap1_01_rails_07
79546F82 -1283.1066,-2529.9771,12.9635 79546F82 ap1_01_a_centreline_010

더 나은 열의 경우:

$ join -o0,1.2,0,2.2 <(sort file2) <(sort file1) | column -t
035B337C  -1314.6719,-2721.7378,12.9467  035B337C  ap1_01_a_arrows_005
0E1D31E7  1919.4160,-1814.3889,160.5210  0E1D31E7  prop_bush_med_02
0E1D31E7  1919.9885,-2628.2529,0.7537    0E1D31E7  prop_bush_med_02
0E1D31E7  192.0235,-2603.1790,4.9978     0E1D31E7  prop_bush_med_02
0E1D31E7  192.1050,4950.3540,389.4736    0E1D31E7  prop_bush_med_02
136667ED  -1294.6945,-2376.0317,21.8279  136667ED  ap1_01_a_ap1_01_rails_07
79546F82  -1283.1066,-2529.9771,12.9635  79546F82  ap1_01_a_centreline_010

관련 정보