Проверка, делится ли количество символов в файле на 3

Необходимо включить архитектуру i386:

sudo dpkg --add-architecture i386
sudo apt update

Затем установите 32-битный пакет -:

sudo apt install libx11-6:i386
-1
14.04.2020, 09:54
4 ответа

Предполагая, что ваши нуклеотиды закодированы с использованием букв в группе acgtn, следующая команда удалит все, что не является символом из этой группы (, например. новые строки и пробелы и т. д. ), а затем посчитайте оставшиеся символы:

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

Затем вы можете проверить это число с помощью простого теста, но обратите внимание на использование $((...)), а не $(...):

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

Если вы используете буквы в верхнем регистре -или их сочетание, то соответствующим образом расширяйте строку, используемую с tr.

4
19.03.2021, 02:29

Чтобы удалить все не -символы новой строки в группах по три, мы можем сделать:

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
2
19.03.2021, 02:29

A sedопция

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

Просто удалите все непрерывные допустимые группы из 3-х оснований, и если в конце останется что-либо, кроме строки нулевой длины, у вас возникнет проблема... хотя это позволит создавать новые строки при условии, что разрыв кратен 3 базы.

0
19.03.2021, 02:29

Использование bash, GNUgrepи wc, но без переменных:

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

...который возвращает истинный код выхода, только если символы ДНК кратны трем.

Использование этого в коде может выглядеть так:

if (exit $(( $(grep -io '[acgtn]' file | wc -l)%3 )) ); then
0
19.03.2021, 02:29

Теги

Похожие вопросы