두 개의 파일이 있습니다. file1
6개의 열이 있고 file2
2개의 열이 있습니다. 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