파일을 병합하고 ID 필드를 기반으로 열 값을 가져옵니다.

파일을 병합하고 ID 필드를 기반으로 열 값을 가져옵니다.
bash-3.2$ cat sample.log sample.log.1 sample.log.2
ID COL1 COL2 COL4
1  col1 col2 col4
2  c1   c2   c4
3  co1  co2  co4

ID COL3 COL1
1  col3 col1
2  c3   c1
3  co3  co1

ID COL1 COL2 COL3
1  col1 col2 col3
2  c1  c2   c3
3  co1  co2  co3

데이터베이스의 여러 테이블에 대한 선택 쿼리와 같이 특정 ID에 대한 열 값을 제공하도록 awk 스크립트를 작성해야 합니다.

ID가 1인 col1 col2 및 col3 필드를 제공하면 중복된 결과가 없어야 합니다. 결과는 다음과 같아야 함을 의미합니다.

The result should be
ID COL1 COL2 COL3
1  col1 col2 col3

하지만

The result should be
ID COL1 COL2 COL3 COL3
1  col1 col2 col3 col3

제안이라도 좋습니다.

awk ' BEGIN { while ( (getline line < "sample.log") > 0 ) {ids[substr(line,1,index(line," ")-1)];} } { // get the column values here based on the stored id's .. } ' sample.log sample.log.1 sample.log.2

위에서 언급한 것과 비슷한 것을 하려고 합니다. 이것이 좋은 생각인지 잘 모르겠습니다.

답변1

다음 join명령을 사용하여 이 작업을 수행할 수 있습니다.

join -1 1 -2 1 sample.log sample.log.1 -o 1.1,1.2,1.3,2.2

출력은 "단일 공백"으로 구분되지만 awk를 사용하여 열 정렬로 형식을 다시 지정할 수 있습니다.

join입력 파일은 정렬되어야 합니다 .

관련 정보