gawk를 사용하여 특정 열을 변경하고 PDB의 원래 형식을 유지하세요.

gawk를 사용하여 특정 열을 변경하고 PDB의 원래 형식을 유지하세요.

아래와 같이 *.pdb 파일이 있습니다.

  CRYST1   78.428   78.428   78.428  90.00  90.00  90.00 P 1           1
  ATOM      1  CI1 JPIPP   1      41.874  78.965  24.633  1.00  0.00      PI   C
  ATOM      2  CI2 JPIPP   1      41.978  79.560  26.065  1.00  0.00      PI   C
  ATOM      3  CI3 JPIPP   1      40.811  80.549  26.148  1.00  0.00      PI   C
  ATOM      4  CI4 JPIPP   1      39.498  79.850  25.983  1.00  0.00      PI   C
  ATOM      5  O4P JPIPP   1      38.376  80.788  26.069  1.00  0.00      PI   O
  ATOM      6  P4  JPIPP   1      37.130  80.601  27.002  1.00  0.00      PI   P
  ATOM      7  O41 JPIPP   1      37.214  81.710  27.969  1.00  0.00      PI   O
  ATOM      8  O42 JPIPP   1      35.998  80.809  26.128  1.00  0.00      PI   O
  ATOM      9  O43 JPIPP   1      37.088  79.268  27.654  1.00  0.00      PI   O
  ATOM     37  HT3 ILE P  10      13.930  68.062  46.163  1.00  0.00      P1
  ATOM     38  CA  ILE P  10      15.421  69.513  46.954  1.00  0.00      P1   C
  ATOM     39  HA  ILE P  10      14.944  69.690  47.906  1.00  0.00      P1   H
  ATOM     40  CB  ILE P  10      16.432  68.520  47.458  1.00  0.00      P1   C

열 3이 P4 또는 CA인 경우 열 10의 값을 "1"로 변경하려고 합니다. 이를 달성하기 위해 awk를 사용해 보았지만 실패했습니다. awk에서는 형식을 보존할 수 없습니다.

"gawk" 사용을 제안하고 형식을 성공적으로 유지하는 답변을 찾았습니다. 솔루션을 변경해 보았지만 불행히도 작동하지 않습니다. 이 문제를 해결하는 데 도움을 주세요.

  gawk '
   # NR==FNR { pdb[NR]=$0; next }
    {
    split(pdb[FNR],flds,FS,seps)

    if ( flds[3] == "CA" || flds[3] == "P4" 
    flds[10]=1

    for (i=1;i in flds;i++)
    printf "%s%s", flds[i], seps[i]
    print ""
    }
    ' NVT20ns.pdb > test.pdb

답변1

$ perl -pe 's/ILE P/ILEP/; s/^(\s*(\S+\s+){9})\S+/${1}1/ if /^(\s*(\S+\s+){2})(P4|CA)/; s/ILEP/ILE P/' ip.txt 
  CRYST1   78.428   78.428   78.428  90.00  90.00  90.00 P 1           1
  ATOM      1  CI1 JPIPP   1      41.874  78.965  24.633  1.00  0.00      PI   C
  ATOM      2  CI2 JPIPP   1      41.978  79.560  26.065  1.00  0.00      PI   C
  ATOM      3  CI3 JPIPP   1      40.811  80.549  26.148  1.00  0.00      PI   C
  ATOM      4  CI4 JPIPP   1      39.498  79.850  25.983  1.00  0.00      PI   C
  ATOM      5  O4P JPIPP   1      38.376  80.788  26.069  1.00  0.00      PI   O
  ATOM      6  P4  JPIPP   1      37.130  80.601  27.002  1.00  1      PI   P
  ATOM      7  O41 JPIPP   1      37.214  81.710  27.969  1.00  0.00      PI   O
  ATOM      8  O42 JPIPP   1      35.998  80.809  26.128  1.00  0.00      PI   O
  ATOM      9  O43 JPIPP   1      37.088  79.268  27.654  1.00  0.00      PI   O
  ATOM     37  HT3 ILE P  10      13.930  68.062  46.163  1.00  0.00      P1
  ATOM     38  CA  ILE P  10      15.421  69.513  46.954  1.00  1      P1   C
  ATOM     39  HA  ILE P  10      14.944  69.690  47.906  1.00  0.00      P1   H
  ATOM     40  CB  ILE P  10      16.432  68.520  47.458  1.00  0.00      P1   C
  • ILE P네 번째 열에는 처리할 전처리 및 후처리가 있습니다.
  • s/^(\s*(\S+\s+){9})\S+/${1}1/열 10 값을 다음으로 변경하십시오.1
  • /^(\s*(\S+\s+){2})(P4|CA)/세 번째 열의 P4또는 와 일치합니다.CA

관련 정보