파일의 문자 수가 3으로 나눌 수 있는지 확인

파일의 문자 수가 3으로 나눌 수 있는지 확인

내 DNA 파일의 뉴클레오티드 기본 문자 수가 3의 배수인지 확인하려고 하는데 다음 코드에서 계속 오류가 발생합니다.

var4=$(wc -c < $1 | bc)
var5=$($var4 % 3)

if [ "$var5" -eq 0 ]; then

보시다시피 위의 코드는 완전하지 않지만 문제가 있는 부분만 표시하고 있습니다.

답변1

뉴클레오티드가 그룹의 문자를 사용하여 인코딩되었다고 가정하면 acgtn다음 명령은 해당 그룹에서 문자가 아닌 모든 항목(예: 개행 및 공백 등)을 삭제한 다음 나머지 문자 수를 계산합니다.

ncount=$( tr -d -c 'acgtn' <"$1" | wc -c )

그런 다음 간단한 테스트를 통해 이 숫자를 확인할 수 있지만 $((...))다음 대신 을 사용하는 것에 유의하세요 $(...).

if [ "$(( ncount % 3 ))" -eq 0 ]; then
    echo 'nucleotide count is multiple of 3'
fi

대문자를 사용하거나 두 문자를 혼합하여 사용하는 경우 와 함께 사용된 문자열을 tr적절하게 확장하세요.

답변2

세 개 그룹에서 개행이 아닌 모든 문자를 제거하려면 다음을 수행할 수 있습니다.

sed 's/...//g' file

결과가 빈 줄뿐이라면 모든 줄에는 세 개의 문자가 여러 개 있는 것입니다.

입력이 한 줄이 아니고 다른 문자(줄 바꿈 포함)를 포함할 수 있는 경우 ACGTN줄 바꿈을 포함하여 뉴클레오티드 기본 문자(대문자로 가정)가 아닌 모든 항목을 제거합니다.

{ <file tr -cd 'ACGTN'; echo; } | sed 's/...//g'

그 결과가 비어 있으면(개행만) 기본 문자 수는 3의 배수입니다.

개수가 3의 배수가 아닌 경우 스크립트를 중지(종료)한다고 가정하면 다음을 사용하세요.

if [ "$( { <file tr -cd 'ACGTN'; echo; } | sed 's/...//g')" ]; then
    echo 'nucleotide count is not multiple of 3'
    exit 1
fi

답변3

옵션sed

f=$(sed -E "s/[actgn]{3}//g" file); echo ${#f}

3개의 염기로 구성된 인접한 유효한 그룹을 모두 삭제하고 끝에 길이가 0인 문자열 이외의 것이 남아 있으면 문제가 있는 것입니다. 단, 중단이 3개 염기의 배수인 경우 새 줄을 허용할 수도 있습니다.

답변4

,bash암소 비슷한 일종의 영양 grepwc, 변수는 없습니다.

(exit $(( $(grep -io '[acgtn]' file | wc -l)%3 )) )

...이것은진실DNA 문자가 3의 배수인 경우에만 종료 코드가 발생합니다.

코드에서 이것을 사용하는 것은 다음과 같습니다:

if (exit $(( $(grep -io '[acgtn]' file | wc -l)%3 )) ); then

관련 정보