$ awk '
NR==FNR{ sp[$0]; next } # this is for reading species data into sp array
/species/ { # from this point for moldata's lines
if (substr($0,2) in sp) { # if the read line match with data in sp array
print # first print title
while(getline > 0) { # and then read until blank line and print
if (NF == 0) { print ""; break }
print
}
}
}
' species_list moldata
>species_1
?????????CACTTGGArGGTGGAGCCAAGAAGGTTATTATTTCTGCTCCCAGTGCTGACGCGCCCATGTACGTGGTC
TGTCAACCTCGATTCTTATGACCCATCTGCTAAGGTCATTTCGAATGCTTCCTGCACCACCAACTGCCTCGCTCCCCT
>species_3
CAAAGCCGTAGGCAAAGTCATTCCTGCTCTCAACGGTAAACTGACTGGCATGGCCTTCCGTGTTCCCGTTCCAAATGT
CGGTTGTGGATCTTACTGTTCGCyTGGGAAAACCAGCCTCTTATGACrCCATTAAACAGAAGGTCAAGGAGGCTGCTG
>species_5
GTTCCGCAAAGCTCAATGCCCTATTGTTGAGCGTCTGACCAATTCTCTCATGATGCATGGCCGCAACAACGGCAAGAA
TGATGGCAGTGCGAATTGTTAAGCATGCCTTTGAAATCATCCACCTTCTGACTGGAGAGAATCCTCTTCAAGTACTCG
Следуя совету Жиля в его комментарии к вопросу и еще нескольким поискам в Интернете, я наткнулся на эту ссылкуhttps://github.com/bendikro/emacs-conf/blob/master/emacs-conf/key-bindings.elс некоторыми разделами, определяющими ключи соответствующим образом.
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; Fix for screen / tmux
;; some snipped code
;; Fix ALT + arrow keys inside screen/tmux
(define-key input-decode-map "\e[1;3A" [M-up])
(define-key input-decode-map "\e[1;3B" [M-down])
(define-key input-decode-map "\e[1;3C" [M-right])
(define-key input-decode-map "\e[1;3D" [M-left])
Я также скопировал и адаптировал его для Shift
, и теперь он работает нормально.
Это настройки в самих приложениях, объединенных с терминалом.
Поведение DEC VT, которое имитируется Xterm, отправляет расширенное ключевое событие в виде управляющей последовательности с параметрами. Многие наивные программы не могут их правильно декодировать, так как они ошибочно полагают, что последовательности управления с клавиатуры будут простыми последовательностями управления без параметров. Некоторые из них настолько наивны, что даже не ищут должным образом промежуточные и конечные символы. В конечном итоге они декодируют только часть управляющей последовательности, а остальное обрабатывают как обычный ввод, что приводит к таким странностям, как то, что вы видите.
vim способен корректно декодировать такие последовательности клавиш, и как убедиться в этом, объясняется в разделе xterm-modifier-keys
его справки в строке -.
nvim тоже естьхотя для этого не требуется настраивать переменные termcap так, как это делается для vim.
Загвоздка в том, что приложения, подобные этому и , требуют, чтобы терминал думал, что он находится в режиме клавиш курсора приложения и режиме клавиатуры приложения . Обычно терминалы находятся в нормальном режиме клавиш курсора и нормальном режиме клавиатуры . Эти приложения сообщают терминалу о необходимости переключения режимов на время, распечатывая управляющую последовательность на терминале.
Описание терминала (предполагает, что ваш TERM
установлен на "xterm" )предоставляет необходимую информацию (см., например, комментарий перед записьюxterm+pcfkeys
).
xterm с 1999 г.(и его подражатели konsole и gnome -терминал, начиная с нескольких лет спустя --см. xterm FAQ)предоставляют расширенный набор функций -клавиши с использованием модификаторов shift -, control -, alt -и meta -:
add parameters to function keys to indicate if shift, control or alt are set. The codes are based on a description of a DEC VT510 with a PC keyboard
Вопрос о том, является ли xterm «имитацией» DEC VT, конечно :спорный в то время, не было -свободно доступного руководства, поэтому «описание» было отправлено по электронной почте в несколько строк текста. Ожидайте некоторых вариаций.
Первоначальное поведение было изменено в 2002 году , заставив xterm отправлять число в качестве второго параметра, чтобы указать, какие модификаторы используются (после «1», что emacs может интерпретировать как повтор -считать ).
Интересно продолжение с примерами для vim и emacs со ссылкой на konsole: