Пропускать любой > ...
блок:
awk '/^>/ { p = !p } p' input.txt
p
флаг печати - p
средства печатают когда p
верно, как действие по умолчанию print
когда ни один не обеспечивается. В awk
, переменные начинаются пустой, который оценивает ко лжи в булевых контекстах. Каждый раз a > ...
строка достигнута, переключитесь p
флаг.
Распечатать каждый n
блок th, разграниченный > ...
строки:
awk -v n=200 '/^>/ { if (skip == 0) skip = n - 1; else --skip; } skip == n - 1' input.txt
Это - подобная логика, кроме с тех пор n
не 2, мы должны использовать счетчик вместо булева флага. Здесь, skip
количества, насколько больше > ...
строки для пропуска, прежде чем мы начнем печатать снова. Я использую skip == n - 1
как флаг печати как что-то вроде короткого пути.
Каждая команда обновления в правиле Makefile выполняется в отдельной оболочке. Таким образом, $? не содержит статуса выхода предыдущей неудачной команды, а содержит любое значение по умолчанию для $? в новой оболочке. Поэтому ваш тест [ $? -eq 0 ] всегда проходит успешно.
Когда ошибки должны быть проигнорированы, из-за флага '-' или '-i', делает так же, как success, обращение с возвратом ошибки, за исключением того, что выводит сообщение о статусе кода, с которым оболочка завершила работу, и говорит, что ошибка была проигнорирована.
Чтобы использовать статус выхода make
в подобном случае, выполните make
из скрипта:
#!/bin/bash
make
([ $? -eq 0 ] && echo "success!") || echo "failure!"
И пусть ваш Makefile будет содержать:
all:
/bin/false
Почтовый сервер поврежден. Он утверждает, что имеет сообщение под номером 1 в команде UIDL, но затем команда LIST, пытающаяся получить размер этого сообщения, утверждает, что такое сообщение отсутствует.
-121--174998- Проверка $?
не требуется, поскольку & &
работает, если $?
равно нулю и | |
выполняется в случае ненулевого возвращаемого значения.
И вы не нуждаетесь в минусе, так как при возврате значение, которое нужно сделать, берется из последнего продолжающегося программного вызова линии. Таким образом, это хорошо работает
неудача:
@/bin/false && echo "success!" || echo "failure!"
успех:
@/bin/true && echo "success!" || echo "failure!"
противоположное происходит: Если вы хотите сделать свое собственное сообщение и хотите сломать сделать процесс так или иначе с ненулевым значением, вы должны написать что-то вроде этого:
неудача:
@/bin/false && echo "success!" || { echo "failure!"; exit 1; }