문자열에 변수 사용

문자열에 변수 사용

문제가 생겼습니다. 저는 자동화를 위해 Linux를 사용하는 생물학자이므로 최고의 프로그래밍 배경 지식이 없으므로 도움을 주시면 대단히 감사하겠습니다.

수천 줄의 텍스트가 포함된 큰 텍스트 파일이 있습니다. 예를 들면 다음과 같습니다.

1. ATOM   1698  NE2AGLN A 400      14.237 -14.941 -28.964  0.50 19.10    -0.370 N 
2. ATOM   1699  HE2A1GLN A 400      15.059 -14.399 -28.698  1.00  0.00     0.159 HD
3. ATOM   1700  HE2A2GLN A 400      13.869 -15.668 -28.351  1.00  0.00     0.159 HD
4. ATOM   1701  NE2BGLN A 400      11.754 -15.026 -32.239  0.50 15.67    -0.370 N 
5. ATOM   1702  HE2B1GLN A 400      11.970 -15.937 -31.835  1.00  0.00     0.159 HD
6. ATOM   1703  HE2B2GLN A 400      11.794 -14.906 -33.251  1.00  0.00     0.159 HD
7. ATOM   1704  N   ASP A 401      10.553 -18.216 -28.161  1.00 15.63    -0.231 NA
8. ATOM   1705  CA AASP A 401      10.830 -19.591 -27.761  0.50 16.06     0.160 C 

다른 줄과 일치하지 않는 줄의 공백 중 하나를 제거하여 파일의 특정 줄을 수정해야 합니다. 제가 나열한 코드에서 2, 3, 5, 6행에 너무 많은 문자가 포함되어 있으므로 공백을 제거해야 합니다. 필요할 때 열 2와 열 3(예: 1702와 HE2B1GLN 사이) 사이의 단일 공백을 제거하고 싶습니다.

일련의 sed 명령을 사용하여 이러한 문제가 있는 줄을 찾아 공백 1을 뺀 동일한 문자열로 바꾸는 코드를 작성했습니다. 예는 다음과 같습니다:

for i in {1..10}
do
echo $i

    sed "s/  HE2B$iGLN/ HE2B$iGLN/g" NEW2.pdbqt>NEW3.pdbqt

done

문제는 이것이 잘못된 행을 수정하는 반면 "GLN"으로 끝나는 열은 제외된다는 것입니다. 문자열 중간에 있는 1 숫자를 변경하는 일종의 루프를 만들어야 하지만 sed 명령의 일부로 유지하려면 문자열의 양쪽이 모두 필요하기 때문에 이것이 문제입니다.

이것이 충분히 명확해지기를 바랍니다. 이것은 나의 첫 번째 프로그래밍 기사입니다.

올바른 구문/해결 방법을 아는 사람이 있습니까?

답변1

아마도 숫자에 관계없이 일치하는 정규식을 사용하는 sed 문을 실행할 수 있습니다.

sed 's/  *\( HE2B[0-9][0-9]*GLN\)/\1/g;' NEW2.pdbqt > NEW3.pdbqt

HE2B줄에만 이 문제가 있습니까, 아니면 모든 줄에 이 문제가 있습니까? 파일의 세 번째 필드입니까, 아니면 여러 공백의 다른 인스턴스가 있습니까? 이를 사용하면 한 줄에 공백이 하나만 있도록 모든 줄에서 여러 공백의 모든 인스턴스를 스쿼시할 수 있습니다.

sed 's/   */ /g;' NEW2.pdbqt > NEW3.pdbqt

선행 및/또는 후행 공백에 문제가 있는 경우 공백을 제거할 수도 있습니다.

sed 's/^  *//; s/  *$//; s/   */ /g;' NEW2.pdbqt > NEW3.pdbqt

이 파일에 대해 위의 명령을 실행합니다(저는 후행 공백에 "!"를 사용했습니다).

   ATOM    1698 NE2AGLN A 400 14.237 -14.941 -28.964 0.50 19.10 -0.370 N
ATOM 1699 HE2A1GLN A 400 15.059 -14.399 -28.698 1.00 0.00 0.159 HD
ATOM 1700    HE2A2GLN A 400 13.869 -15.668 -28.351      1.00 0.00 0.159 HD
ATOM 1701 NE2BGLN A 400 11.754 -15.026 -32.239 0.50 15.67 -0.370 N
ATOM 1702  HE2B1GLN A 400 11.970 -15.937 -31.835 1.00 0.00 0.159 HD!!
ATOM 1703       HE2B2GLN A 400 11.794 -14.906 -33.251 1.00 0.00 0.159 HD
          ATOM 1704 N ASP A 401 10.553 -18.216 -28.161 1.00 15.63 -0.231 NA!!!!
ATOM 1705 CA AASP A 401 10.830 -19.591 -27.761 0.50 16.06 0.160 C

다음을 생성합니다.

ATOM 1698 NE2AGLN A 400 14.237 -14.941 -28.964 0.50 19.10 -0.370 N
ATOM 1699 HE2A1GLN A 400 15.059 -14.399 -28.698 1.00 0.00 0.159 HD
ATOM 1700 HE2A2GLN A 400 13.869 -15.668 -28.351 1.00 0.00 0.159 HD
ATOM 1701 NE2BGLN A 400 11.754 -15.026 -32.239 0.50 15.67 -0.370 N
ATOM 1702 HE2B1GLN A 400 11.970 -15.937 -31.835 1.00 0.00 0.159 HD
ATOM 1703 HE2B2GLN A 400 11.794 -14.906 -33.251 1.00 0.00 0.159 HD
ATOM 1704 N ASP A 401 10.553 -18.216 -28.161 1.00 15.63 -0.231 NA
ATOM 1705 CA AASP A 401 10.830 -19.591 -27.761 0.50 16.06 0.160 C

관련 정보