Используйте другой файл для извлечения части строки, совпадающей с grep, а также следующей строки, затем сохраните в новый файл

Интерфейс между терминалом и приложением отправляет байты, а не ключи. Печатные символы интерпретируются как последовательность байтов, соответствующая кодировке символов терминала. Функциональные клавиши кодируются как escape-последовательности. Для этих escape-последовательностей существуют общие соглашения, но они не полностью стандартизированы.

Более общие сведения см. В Как работают ввод с клавиатуры и вывод текста? . Для получения дополнительной информации см. Также Есть ли причина, по которой я получаю ^ [[A, когда я нажимаю стрелку вверх на экране входа в консоль? и таблица привязок клавиш?

Все escape-последовательности для функциональных клавиш начинаются с escape-символа , и большинство из них заканчивается на ~ . Vim распознает ряд управляющих последовательностей на основе настроек времени компиляции и информации, которую он имеет на терминале. Если Vim не распознает escape-последовательность, он игнорирует ее, но Vim не знает, какова длина escape-последовательности (он не предполагает, что последним символом является ~ , это не всегда так). Часто после той части, которую распознает Vim, есть паразитные ~ , иногда даже больше.

Вы можете точно увидеть, что отправляет терминал, нажав сначала Ctrl + V , либо в оболочке, либо в режиме вставки Vim.

Вы можете сообщить Vim о функциональной клавише, соответствующей escape-последовательности, с помощью : set , например

:set =^[[19;2~

(замените часть после ^ [ на то, что фактически отправляет ваш терминал).

3
21.08.2018, 01:24
3 ответа

Как говорится, есть более одного способа скинуть 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

2
27.01.2020, 21:15

Если ваши последовательности всегда находятся в одной строке (что не является стандартным форматом fasta, кстати, fasta обычно имеет 60 символов в строке), это тривиально. Просто используйте grep с -A 1 , чтобы напечатать соответствующую строку и следующую, и -f , чтобы передать ему список шаблонов для поиска:

grep -A1 -f File2.txt File1.fasta 

Однако это не удастся, если у вас есть одна последовательность с именем > foobar , а другая с именем > foo и вы ищете foo . В этом случае он напечатает и то, и другое. Для более сложных решений см. Мой ответ здесь . Дайте мне знать, если вам нужен скрипт retrievesqs.pl, он больше не доступен по указанной там ссылке. Мне нужно обновить этот ответ.

2
27.01.2020, 21:15

Есть ли текстовый файл для каждого из 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 вы можете немного ускорить поиск, потому что вы знаете, что в файле есть только одно совпадение.

1
27.01.2020, 21:15

Теги

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