Можно добавить несколько строк LocalForward
:
Host myhost
Hostname 123.123.123.123
IdentityFile ~/.ssh/id_myhost
LocalForward 8811 localhost:8811
LocalForward 6006 localhost:6006
IdentitiesOnly yes
Это то, что вы хотите?
{{1} }FWIW предоставил решение на основе "sed" для обернутых файлов fasta. Базовый поток метода sed заключается в нахождении строки имени последовательности, сначала мы отображаем эту строку в отдельной строке, а затем начинаем накапливать в пространстве шаблона строки последовательности, а также удаляем новую строку по мере продвижения. Этот поток прерывается, когда мы нажимаем на следующую строку имени последовательности или eof.
sed -e '
/^>/{ # caught sequence name line
n # print seq name, next line into pattern space
:loop
N # read next line into PS, if not print PS/quit
/\n>/!s/\n// # join successive sequences
/\n/!bloop # go back for more seq if new seq name not got yet
P;D # print the current seq then delete it, branch to the top with PS having new seq name
}
' your_fasta_file
Это ваш сценарий awk
:
/^>/ {
print s ? s "\n" $0 : $0;
s = "";
next;
}
{
s = s sprintf("%s", $0);
}
END {
if (s)
print s;
}
Первый блок запускается только для строк, начинающихся с >
, т.е. строки заголовка фаста.
В первом блоке что-то печатается. Это что-то s? s "\ n" $ 0: $ 0
. Это означает, что «если s
не равно нулю (или не задано), используйте s
и добавьте к нему новую строку, за которой следует вся текущая строка, в противном случае просто используйте всю текущую строку ". В этой программе s
будет частично прочитанной последовательностью, принадлежащей последней обработанной строке заголовка, и когда программа попадает в строку заголовка, этот оператор print
выводит последнюю последовательность ( которая теперь завершена), если таковая была, а затем новая строка заголовка на новой строке.
Затем блок устанавливает s
в пустую строку (мы еще не читали никакой последовательности, принадлежащей этому заголовку), и мы переходим к следующей строке ввода.
Следующий блок выполняется для всех строк ввода (но не для строк заголовка, поскольку они будут пропущены из-за следующего
в предыдущем блоке). Он просто добавляет текущую строку к s
.Используется sprintf
, но я не совсем уверен, почему ( s = s $ 0
, вероятно, тоже будет работать).
Последний блок будет выполнен после прочтения всех строк ввода. Он напечатает последовательность, принадлежащую последней строке заголовка, если таковая была.
Резюме:
Сценарий awk
объединяет все отдельные строки последовательности, сохраняя их в переменной. Когда строка заголовка найдена, он выводит прочитанную последовательность вместе с новым заголовком в отдельной строке. В конце выводится последовательность, принадлежащая последнему заголовку.
Альтернативный сценарий awk
, который не сохраняет последовательность в переменной (может быть полезно, если у вас очень большие геномы в ваших файлах fasta):
/^>/ {
if (NR == 1) {
print; # 1st header line, just print it.
} else {
# Print a newline for the prev. sequence, then the header line on its own line.
printf("\n%s\n", $0);
}
next; # Skip to next input line.
}
{
printf("%s", $0); # Print sequence without newline.
}
END {
printf("\n"); # Add final newline to output.
}
В качестве «однострочного»:
awk '/^>/{if(NR==1){print}else{printf("\n%s\n",$0)}next} {printf("%s",$0)} END{printf("\n")}' sequence.fasta