두 파일 중 열 1에 일치하는 항목이 있으면 두 파일 사이의 값을 file2(두 번째 열)의 값으로 바꿉니다.

두 파일 중 열 1에 일치하는 항목이 있으면 두 파일 사이의 값을 file2(두 번째 열)의 값으로 바꿉니다.

2개의 csv 파일이 있습니다(크기가 크고 행이 충분하지 않습니다). 여기서는 동일한 줄 수의 샘플 파일만 제공합니다.

파일 1:

NC_008689 2 NA NA NA NA 
NC_002670 3 NA NA NA 186 
NC_002671 9 NA NA NA 107 
NC_009382 25 9 15 NA 100 
NC_003977 45 92 535 NA 492685

파일 2:

NC_008689   Siphoviridae,Biseptimavirus,Staphylococcus virus 108PVL
NC_002670   Siphoviridae,,Lactococcus phage bIL311
NC_002671   Siphoviridae,,Lactococcus phage bIL312
NC_009382   Myoviridae,Peduovirus,Ralstonia virus RSA1
NC_003977   Hepadnaviridae,Orthohepadnavirus,Hepatitis B virus

원하는 출력:

Siphoviridae,Biseptimavirus,Staphylococcus virus 108PVL 2   NA  NA  NA  NA
Siphoviridae,,Lactococcus phage bIL311  3   NA  NA  NA  186
Siphoviridae,,Lactococcus phage bIL312  9   NA  NA  NA  107
Myoviridae,Peduovirus,Ralstonia virus RSA1  25  9   15  NA  100
Hepadnaviridae,Orthohepadnavirus,Hepatitis B virus2 45  92  535 NA  492685

나는 시도했다:

awk 'FNR==NR { F2[$1]=$2 ; next } $1 in F2 {$1 = F2[$1] ; print } ' File2 File1

그러나 결과적으로 나는 다음과 같은 결과를 얻었습니다.

Siphoviridae,Biseptimavirus,Staphylococcus 2 NA NA NA NA
Siphoviridae,,Lactococcus 3 NA NA NA 186
Siphoviridae,,Lactococcus 9 NA NA NA 107
Myoviridae,Peduovirus,Ralstonia 25 9 15 NA 100
Hepadnaviridae,Orthohepadnavirus,Hepatitis 45 92 535 NA 492685

공백이 있는 File2의 이름에 문제가 있습니다.

답변1

join첫 번째 필드를 사용할 수 있습니다 cut.

join <(sort File2) <(sort File1) | cut -d' ' -f2-

또는 인쇄하려는 모든 필드를 join추가하세요 .-o

join -o 1.2,1.3,1.4,2.2,2.3,2.4,2.5,2.6 <(sort File2) <(sort File1)

답변2

노력하다

awk 'FNR == NR { u=$1 ; $1="" ; F[u]=$0 ; } 
   $1 in F { $(NF +1) = F[$1] ; $1 = "" ; print }'

어디

  • $1 = ""해당 값이 (다소) 삭제됩니다 $1.
  • $(NF +1) = F[$1]file1의 줄을 file2의 끝에 추가합니다.

답변3

다음 명령을 사용하여 테스트하면 훌륭하게 작동합니다.

for i in `cat file2|awk '{print $1}'`; do j=`sed -n '/'$i'/p' file2| awk '{print $2,$3,$4}'`;  sed -i "s/$i/$j/g" file1; done

산출

Siphoviridae,Biseptimavirus,Staphylococcus virus 108PVL 2 NA NA NA NA 
Siphoviridae,,Lactococcus phage bIL311 3 NA NA NA 186 
Siphoviridae,,Lactococcus phage bIL312 9 NA NA NA 107 
Myoviridae,Peduovirus,Ralstonia virus RSA1 25 9 15 NA 100 
Hepadnaviridae,Orthohepadnavirus,Hepatitis B virus 45 92 535 NA 492685

관련 정보