다음 두 파일이 있습니다.
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을 선택합니다.