열을 개별적으로 일치시켜 열에 붙여넣는 방법

열을 개별적으로 일치시켜 열에 붙여넣는 방법

다음 두 파일이 있습니다.

    file1.txt  
    0 rs3094315 0 0 C T  
    0 rs12562034 0 0 A G  
    0 rs3934834 0 0 C T  

    file2.txt  
    Chr,Pos,snp_name  
    1, 742429,rs3094315   

file1의 첫 번째 열은 Chr 열이기도 하며 file2의 chr 열로 바꿔야 합니다. 그러나 다음과 같이 snp와 일치해야 합니다.

    file3  
    1 rs3094315 0 0 C T  

File2에는 행과 열 번호가 다릅니다.

답변1

이미 여기에 부분적으로 답변되었습니다. https://stackoverflow.com/questions/24516141/awk-processing-2-files-with- Different-field-separators

awk 'NR==FNR {arr[$2]=$2FS$3FS$4FS$5FS$6; next} {print $1,arr[$3]}' file1 FS="," file2 
1 rs3094315 0 0 C T

답변2

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

$ join -t ' ' -1 2 -2 3 -o2.1,0,1.3,1.4,1.5,1.6 <( sort -k2 file1 ) <( tr ',' ' ' <file2 | sort -k3 )
1 rs3094315 0 0 C T

두 번째 파일 은 file2첫 번째 파일과 다른 필드 구분 기호를 사용하기 때문에 문제가 있습니다 file1. 이 문제는 해당 내용을 실행하여 tr모든 쉼표를 공백으로 바꾸면 해결될 수 있습니다.

그런 다음 두 파일은 데이터를 결합하려는 필드를 기준으로 정렬됩니다. 첫 번째 파일의 필드 2와 두 번째 파일의 필드 3입니다.

그런 다음 두 개의 데이터 세트를 join읽고 공백으로 구분된 지정된 필드에 연결합니다.

출력 필드는 -o플래그에 의해 결정됩니다. 두 번째 파일의 첫 번째 필드(조인 필드)를 선택한 다음 첫 번째 파일에서 필드 3~6을 선택합니다.

관련 정보