awk를 사용하여 서로 다른 두 파일의 열을 병합하는 방법

awk를 사용하여 서로 다른 두 파일의 열을 병합하는 방법

동일한 코드로 생성된 두 개의 파일 bla.tsv(FS= \t)과 blo.tsv(FS= ) 이 있습니다 .\t

bla.tsv:

id hub klos
3 2 bis
2 5 
4 2 bis
5 2 
8 3 
7 2 bis

blo.tsv:

id hub klos
3 2 
2 5 jus
4 2 
5 2 
8 3 jus
7 2 

klos이 두 열을 병합하여 새 파일을 얻고 싶습니다 .

id hub klos
3 2 bis
2 5 jus
4 2 bis
5 2 
8 3 jus
7 2 bis

정확한:

  1. 파일의 나머지 부분은 모두 동일하며 klos파일 간에 열만 변경됩니다.

  2. 이것은 47개의 열이 있는 실제 파일의 하위 샘플입니다.

  3. 행과 열에 관한 한 완전히 동일한 파일입니다.

  4. klos 열의 경우 첫 번째 파일에 쓰기가 있으면 다른 파일에서 같은 행에 쓰기가 불가능합니다.

병합하는 방법을 온라인에서 검색해 보았지만 두 개가 아닌 하나의 파일 예만 찾았습니다. 무엇을 해야할지 아시나요? 감사해요

답변1

모든 Unix 시스템의 모든 쉘에서 awk를 사용하십시오.

$ awk 'BEGIN{FS=OFS="\t"} NR==FNR{klos[NR]=$3; next} $3==""{$3=klos[FNR]} 1' blo.tsv bla.tsv
id      hub     klos
3       2       bis
2       5       jus
4       2       bis
5       2
8       3       jus
7       2       bis

관련 정보