Интерфейс между терминалом и приложением отправляет байты, а не ключи. Печатные символы интерпретируются как последовательность байтов, соответствующая кодировке символов терминала. Функциональные клавиши кодируются как escape-последовательности. Для этих escape-последовательностей существуют общие соглашения, но они не полностью стандартизированы.
Более общие сведения см. В Как работают ввод с клавиатуры и вывод текста? . Для получения дополнительной информации см. Также Есть ли причина, по которой я получаю ^ [[A, когда я нажимаю стрелку вверх на экране входа в консоль? и таблица привязок клавиш?
Все escape-последовательности для функциональных клавиш начинаются с escape-символа , и большинство из них заканчивается на ~
. Vim распознает ряд управляющих последовательностей на основе настроек времени компиляции и информации, которую он имеет на терминале. Если Vim не распознает escape-последовательность, он игнорирует ее, но Vim не знает, какова длина escape-последовательности (он не предполагает, что последним символом является ~
, это не всегда так). Часто после той части, которую распознает Vim, есть паразитные ~
, иногда даже больше.
Вы можете точно увидеть, что отправляет терминал, нажав сначала Ctrl + V , либо в оболочке, либо в режиме вставки Vim.
Вы можете сообщить Vim о функциональной клавише, соответствующей escape-последовательности, с помощью : set
, например
:set =^[[19;2~
(замените часть после ^ [
на то, что фактически отправляет ваш терминал).
Как говорится, есть более одного способа скинуть cat:
grep -F -f File2.txt -A 1 File1.fasta > File3.log
< File2.txt sed -e 's|[.]|\\&|g; s|.*|g/^>&/.,.+1W File3.log|' | ed -s - File1.fasta
Здесь мы делаем идентификаторы последовательностей подходящими для динамической генерации пакетного сценария ed
. Который затем передается в ed
, который использует его для изменения вашего файла fasta
и сохраняет результаты в File3.log
Если ваши последовательности всегда находятся в одной строке (что не является стандартным форматом fasta, кстати, fasta обычно имеет 60 символов в строке), это тривиально. Просто используйте grep
с -A 1
, чтобы напечатать соответствующую строку и следующую, и -f
, чтобы передать ему список шаблонов для поиска:
grep -A1 -f File2.txt File1.fasta
Однако это не удастся, если у вас есть одна последовательность с именем > foobar
, а другая с именем > foo
и вы ищете foo
. В этом случае он напечатает и то, и другое. Для более сложных решений см. Мой ответ здесь . Дайте мне знать, если вам нужен скрипт retrievesqs.pl, он больше не доступен по указанной там ссылке. Мне нужно обновить этот ответ.
Есть ли текстовый файл для каждого из 20 идентификаторов? Затем, предполагая, что они называются sequence1.txt и так далее (пожалуйста, адаптируйте), do
for file in sequence*.txt; do
id=`grep AB $file`
grep $id -A1 $file1.fasta |grep -v $id
done
Вторая строка предполагает, что идентификатор всегда содержит AB
. Если нет, возможно, это всегда первая строка, тогда используйте вместо нее head -1 $ file
.
Третья строка извлекает строку идентификатора и следующую строку. Второй grep удаляет строку id. Вы можете удалить его, если хотите выводить строку id вместе с последовательностью, чтобы вы знали, какая последовательность для какого id.
С помощью дополнительной опции grep
-m1
вы можете немного ускорить поиск, потому что вы знаете, что в файле есть только одно совпадение.