다른 파일의 특정 지점에 텍스트 블록 복사

다른 파일의 특정 지점에 텍스트 블록 복사

한 파일의 텍스트 블록을 다른 파일의 특정 지점으로 이동하는 방법을 알아내려고 합니다. 다음과 같은 파일이 많이 있습니다.

H                 -9.92247800    1.33807800   -0.69208300  
S                 -9.74392800    0.01073000   -0.55448800   
C                 -7.98603700    0.04294200   -0.19355700   
C                 -7.45325900   -1.23715800    0.02112600
...  

이전에 다음과 같았던 파일로 숫자 열을 이동하고 싶습니다.

...
0 1 0 1 0 1

H                0  H
S                0  H
C                0  H
C                0  H
...

따라서 다음과 같아야 합니다.

...
0 1 0 1 0 1

H                0 -9.92247800    1.33807800   -0.69208300 H
S                0 -9.74392800    0.01073000   -0.55448800 H
C                0 -7.98603700    0.04294200   -0.19355700 H
C                0 -7.45325900   -1.23715800    0.02112600 H
...

많은 수의 파일에 대해 이를 자동화하는 방법이 있습니까? 블록을 선택하고 복사한 다음 수동으로 다른 파일에 붙여 넣을 수 있다는 것을 알고 있지만 파일이 너무 많아서 불가능합니다.

숫자 블록은 항상 같은 위치(행과 열)에서 시작하고 끝나며, 붙여넣고 싶은 위치는 항상 같은 행과 열에 있습니다.

답변1

Python을 사용하고 싶은지 확실하지 않으며 아마도 다른 언어를 사용하는 깔끔한 방법이 있을 수 있지만 Python은 다음과 같은 방식으로 이를 수행할 수 있습니다.

암호:

# describe where the text block is located
f1_start = 2, 18
f1_size = 4, 40
f2_start = 4, 19

# open all three files
with open('file1', 'rU') as f1, open('file2', 'rU') as f2, open('file3', 'w') as f3:
    
    # skip some lines in file1
    for _ in range(f1_start[0] - 1):
        f1.readline()
        
    # write first block of file2 to file3
    for _ in range(f2_start[0] - 1):
        f3.write(f2.readline())
        
    # read from and merge lines in file1 and file 2
    for _ in range(f1_size[0]):
        l1 = f1.readline()[f1_start[1]:f1_start[1] + f1_size[1]].rstrip()
        l2 = f2.readline()
        l3 = l2[:f2_start[1]] + l1 + l2[f2_start[1]:]
        f3.write(l3)
        
    # write remaining lines from file2 to file3
    while True:
        l2 = f2.read()
        if not l2:
            break
        f3.write(l2)

결과:

...
0 1 0 1 0 1

H                0 -9.92247800    1.33807800   -0.69208300 H
S                0 -9.74392800    0.01073000   -0.55448800 H
C                0 -7.98603700    0.04294200   -0.19355700 H
C                0 -7.45325900   -1.23715800    0.02112600 H
...

관련 정보