Bash 스크립트에서 개별 텍스트 필드 수정

Bash 스크립트에서 개별 텍스트 필드 수정

길이가 항상 9자여야 하는 변수가 있습니다.

PEPTIDE_SEQ="AAAAAAAAA"

그런 다음 길이 변수를 만들었습니다.

len=9 

내가 원하는 것은 PEPTIDE_SEQ로 시작하여 다음과 같은 파일 청크로 출력하는 것입니다.

AAAAAAAAA
CAAAAAAAA
DAAAAAAAA
EAAAAAAAA
FAAAAAAAA
GAAAAAAAA
HAAAAAAAA
IAAAAAAAA
KAAAAAAAA
LAAAAAAAA
MAAAAAAAA
NAAAAAAAA
PAAAAAAAA
QAAAAAAAA
RAAAAAAAA
SAAAAAAAA
TAAAAAAAA
VAAAAAAAA
WAAAAAAAA
YAAAAAAAA

B, J, O, U, X, Z 문자를 제외하고 이 코드를 사용하면 PEPTIDE 변수만 반복하여 파일로 출력할 수 있습니다.

while [ $i -le 20 ]
do
    printf '%*s\n' "$len" | tr ' ' "$PEPTIDE_SEQ"  >> demo.txt
    i=$(( i+1 ))     # increments $i
done 

sed 또는 awk를 사용하여 이 코드 블록을 어떻게 시뮬레이션할 수 있나요? 그런 다음 다른 코드 블록을 생성하되 이번에는 두 번째 문자를 바꾼 다음 세 번째 코드 블록에 대해 루프를 반복하고 세 번째 문자를 바꾸는 식으로 계속됩니다.

답변1

그리고 bash:

#!/bin/bash

pep="AAAAAAAA"

pos=1
while [ "$pos" -le "${#pep}" ]; do
    for aa in A C D E F G H I K L M N P Q R S T V W X Y
    do
        printf '%s%s%s\n' "${pep:0:pos-1}" "$aa" "${pep:pos}"
    done
    pos=$(( pos + 1 ))
done

외부 루프는 while주어진 펩타이드 서열의 위치를 ​​통과하며, 각 위치에 대해 유효한 아미노산 코드가 해당 위치의 펩타이드에 하나씩 입력됩니다(이것은 관련 위치까지 펩타이드 부분의 하위 문자열 확장을 사용합니다. 변경된 아미노산이 삽입된 후, 펩타이드의 꼬리 끝 부분에 또 다른 하위 문자열 확장이 수행됩니다.

답변2

귀하의 사양이 명확하지 않습니다. 얼마나 멀리 갈 것인가?

awk -vPS="$PEPTIDE_SEQ" -vLEN=$len -vXCLI="B,J,O,U,X,Z" '
BEGIN   {PS = substr (PS, 2)     
         for (n=split (XCLI, T, ","); n; n--) XCL[T[n]]
         for (i=65; i<=90; i++) {C = sprintf ("%c", i)
                                 if (!(C in XCL)) printf "%s%s ", C, PS
                                }
         printf RS
        }
'
AAAAAAAAA CAAAAAAAA DAAAAAAAA EAAAAAAAA FAAAAAAAA GAAAAAAAA HAAAAAAAA IAAAAAAAA KAAAAAAAA LAAAAAAAA MAAAAAAAA NAAAAAAAA PAAAAAAAA QAAAAAAAA RAAAAAAAA SAAAAAAAA TAAAAAAAA VAAAAAAAA WAAAAAAAA YAAAAAAAA 

이해합니다?

편집하다:귀하의 의견을 읽고 사양을 다시 읽으면서 알아냈습니다.

awk -vPS="$PEPTIDE_SEQ" -vXCL="B,J,O,U,X,Z" '
BEGIN   {for (i=65; i<=90; i++) if (!(index(XCL, S = sprintf ("%c", i)))) print C[++n] = S, n
         for (i=1; i<=length(PS); i++)  {for (j=1; j<=n; j++) print substr (PS, 1, i-1) C[j] substr (PS, i+1)
                                         print ""
                                        }
        }
'

이것이 귀하의 요구 사항에 맞습니까? "불량" 문자가 누락된 모든 "양호" 문자가 아니라 제외하려는 문자만 지정하면 됩니다.

관련 정보