일치하는 ID 변수를 기반으로 값 바꾸기

일치하는 ID 변수를 기반으로 값 바꾸기

두 개의 파일이 있습니다. file16개의 열이 있고 file22개의 열이 있습니다. file1일치하는 ID 변수(두 파일 모두의 열 1)를 기반으로 열 6의 값을 열 2의 값으로 바꾸고 싶습니다 .file2

참고: file2포함된 테마는 file1.so보다 작으므로 불행하게도 다음 명령은 작동하지 않습니다.

awk 'NR==FNR{tmp[$1]=$2;next}{print $0,tmp[$1]}' file2 file1

file1좋다:

HG00096 HG00096 0 0 0 -9
HG00097 HG00097 0 0 0 -9
HG00099 HG00099 0 0 0 -9
HG00100 HG00100 0 0 0 -9
HG00102 HG00102 0 0 0 -9

file2좋다:

HG00096 2
HG00097 5
HG00098 5
HG00099 3
HG00100 3
HG00101 5
HG00102 3

내가 생성하려는 파일은 다음과 같습니다.

HG00096 HG00096 0 0 0 2
HG00097 HG00097 0 0 0 5
HG00099 HG00099 0 0 0 3
HG00101 HG00100 0 0 0 5
HG00102 HG00102 0 0 0 3

답변1

사용 join:

join -j 1 -o 0,1.2,1.3,1.4,1.5,2.2 file1 file2

어디:

  • -j두 파일에 대한 조인 필드 정의
  • -o필요에 따라 출력 형식 지정

답변2

당신은 거의 성공했습니다.

awk 'NR==FNR{tmp[$1]=$2;next};{$6=tmp[$1] ; print }' file2.txt file1.txt

어디:

  • $6 = tmp[$1]필드 6을 대체합니다.

답변3

댓글을 달 수는 없지만(권한이 없음) 추가 질문을 하고 싶었습니다. 나는 첫 번째 사람이 요청한 것과 똑같은 일을 하고 싶습니다. 또한 파일 1과 일치하지 않는 파일 2의 나머지 행이 "-9"가 되기를 원합니다. 매우 감사합니다. 별도의 질문을 게시하게 되어 기쁘지만 불필요한 게시물을 더 이상 만들고 싶지 않습니다.


파일 1

HG00096 HG00096 0 0 0 -9
HG00097 HG00097 0 0 0 -9
HG00098 HG00098 0 0 0 -9
HG00099 HG00099 0 0 0 -9
HG00100 HG00100 0 0 0 -9
HG00101 HG00101 0 0 0 -9
HG00102 HG00102 0 0 0 -9

파일 2


HG00096 2
HG00097 5
HG00099 3
HG00101 5
HG00102 3

파일 3


HG00096 HG00096 0 0 0 2
HG00097 HG00097 0 0 0 5
HG00100 HG00100 0 0 0 -9
HG00099 HG00099 0 0 0 3
HG00100 HG00100 0 0 0 -9
HG00101 HG00100 0 0 0 5
HG00102 HG00102 0 0 0 3

관련 정보