문제가 생겼습니다. 저는 자동화를 위해 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