내 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
암소 비슷한 일종의 영양 grep
및 wc
, 변수는 없습니다.
(exit $(( $(grep -io '[acgtn]' file | wc -l)%3 )) )
...이것은진실DNA 문자가 3의 배수인 경우에만 종료 코드가 발생합니다.
코드에서 이것을 사용하는 것은 다음과 같습니다:
if (exit $(( $(grep -io '[acgtn]' file | wc -l)%3 )) ); then