
파일 1이 있습니다.
A1 1 NA
A1 2 NA
A1 3 NA
A1 4 A
A1 5 G
A1 6 T
A1 7 NA
A1 8 NA
A1 9 NA
A2 1 NA
A2 2 NA
A2 3 T
A2 4 NA
파일 2:
A1 4 A
A1 5 B
A1 6 T
A2 3 T
파일 1의 A2의 행 번호 4,5,6 및 3을 파일 2의 값 4,5,6 및 3으로 바꾸고 싶습니다.
새 파일 3의 예상 출력:-
A1 1 NA
A1 2 NA
A1 3 NA
A1 4 A
A1 5 B
A1 6 T
A1 7 NA
A1 8 NA
A1 9 NA
A2 1 NA
A2 2 NA
A2 3 T
A2 4 NA
파일 1에는 파일 1의 열 1(A1~A13 값)의 각 값에 대해 100,000개의 행이 있습니다. 예시만 보여드렸습니다. 파일 2에는 파일 1의 몇 줄만 포함되어 있으며 파일 2의 열 3에 있는 값이 변경됩니다.
Linux나 Python에서 이것을 시도하고 싶습니다. 사실 이미 누군가가 답변을 게시했습니다. 대답은 매우 좋습니다.
awk 및 python q 명령을 사용해 보았지만 문제를 해결할 수 없었습니다. 결과를 얻는 데 시간이 오래 걸리고 결과 파일이 0바이트입니다.
12시간 동안 그대로 놔두었지만 여전히 결과가 나오지 않았습니다.
내 원본 데이터의 몇 행
파일 1
A01 1 C
A01 2 T
A01 3 A
A01 4 A
A01 5 A
A01 6 A
A01 7 C
A01 8 A
A01 9 C
A01 10 G
A01 11 C
A01 12 G
A01 13 G
A01 14 A
A01 15 T
A01 16 C
A01 17 C
A01 18 T
A01 19 T
A01 20 C
A01 21 G
A01 22 G
A01 23 G
A01 24 T
A01 25 C
A01 26 G
A01 27 G
A01 28 G
A01 29 T
A01 30 C
A01 31 G
.
.
.
A01 60534289 T
파일 2
A01 905 T
A01 911 A
A01 922 C
A01 953 C
A01 967 T
A01 979 C
A01 1046 T
A01 1160 G
A01 1165 T
A01 1167 T
A01 1171 C
A01 1282 A
A01 1382 T
A01 1408 C
A01 1743 T
A01 1804 C
A01 3089 G
A01 3109 T
A01 3243 A
A01 3276 T
A01 3302 T
A01 3356 G
A01 3373 G
A01 3399 G
A01 3631 C
A01 3677 G
A01 3682 G
.
.
.
A01 605342 B
따라서 파일 2에서 T가 위치 905에 있는 경우
A01 905 T
파일 1에서 위치 905가 B인 경우
A01 905 B
file1이 있다고 가정하면 다른 위치 값을 변경한다는 의미에서 다른 위치 값을 변경하지 않고 file1의 특정 위치에서 B를 T로 바꿔야 합니다.
A01 10905 C
따라서 파일 1의 이 위치에 대해 10인 경우에만905file2에 다른 문자가 있습니까?
답변1
아직 여기에 댓글을 추가할 수 없으므로 여기에 내 awk
솔루션이 있습니다.여기예시 입력 및 출력에 대해 테스트했습니다.
cat file1 file2 | awk '
BEGIN { OFS = " " }
{ rows[$1 OFS $2] = $3 }
END { for (r in rows) print(r, rows[r]) }
' | sort -V >file3
이 답변이나 게시된 다른 답변을 시도해 보셨나요? 이렇게 하면 예상하지 못한 실제 출력이 무엇이었나요? 대답이 효과가 없으면 데이터 파일 형식에 대한 추가 정보를 제공하는 것이 도움이 될 수 있습니다.
답변2
Awk
해결책:
awk 'NR == FNR{ a[$1, $2] = $3; next }
($1, $2) in a{ $3 = a[$1, $2] }1' file2 OFS=' ' file1
산출:
A1 1 NA
A1 2 NA
A1 3 NA
A1 4 A
A1 5 B
A1 6 T
A1 7 NA
A1 8 NA
A1 9 NA
A2 1 NA
A2 2 NA
A2 3 T
A2 4 NA