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

Не существует «стандартной» команды, обеспечивающей требуемое поведение. Однако в Debian и производных вы можете использовать действиеstart-stop-daemonс --stopс опцией --retry:

start-stop-daemon --stop --oknodo --retry 15 -n daemontokill

отправит SIGTERMвсем процессам с именем daemontokill, подождет до 15 с, пока они не остановятся, затем отправит SIGKILLвсем оставшимся процессам (из исходного выбора )и подождет еще 15 с для им умереть. Он выйдет со статусом 0, если нечего было убивать или все процессы остановлены, и 2, если некоторые процессы все еще были активны после второго тайм-аута.

Существует несколько вариантов сопоставления процессов различными способами, подробности см. в документации (, ссылка на которую приведена выше ). Вы также можете предоставить более подробное расписание с различными тайм-аутами.

start-stop-daemonявляется частью пакета dpkg, поэтому он всегда доступен в системах Debian (и производных ). Некоторые дистрибутивы, отличные от -.deb, также делают этот пакет доступным; например, он есть в openSUSE Leap 42 . Это довольно просто построить на других платформах :

.

git clone https://salsa.debian.org/dpkg-team/dpkg.git 
cd dpkg
autoreconf -fi &&./configure && make

Вам понадобятся autoconf, automake, libtool, gettext. После завершения сборки вы найдете start-stop-daemonв каталоге utils.

-1
11.09.2020, 21:15
1 ответ
awk -F '' '
   { if (NF != 0)
      { if (toupper($1) != c)
         { if (c != "") print ""
            c = toupper($1)
            print "== "c" =="
         }
         print
      }
   }'

Пояснение:

  • -F ''заставляет awkрассматривать символы как поля. Это точно работает в GNU awk(gawk). Другие реализации могут поддерживать или не поддерживать это. POSIX утверждает, что «если FSявляется пустой строкой, поведение не указано».
  • if (NF != 0)отвечает за игнорирование пустых строк. Вы не указали именно это поведение, но я думаю, что это правильно.
  • cсохраняет прописную версию предыдущего первого символа.
  • if (toupper($1) != c)проверяет, отличается ли заглавная версия первого поля (, т. е. первого символа )в текущей записи (, т. е. строки ввода ), от сохраненного значения. Этот код запускается в первый раз, когда встречается первая не-пустая строка. Это происходит до того, как cбудет присвоено что-либо, и условие тривиально верно. Для более поздних строк это может быть или не быть правдой.
  • if (c != "") print ""печатает пустую строку, которая будет разделять группы, если только cничего не сохраняет, что означает, что ни одна группа еще не была напечатана. Таким образом мы избегаем пустой строки перед первой группой в выводе.
  • c = toupper($1)обновляет c.
  • print "== "c" =="распечатывает запрошенный вами заголовок группы.
  • printпечатает текущую запись (строку ввода ).
2
18.03.2021, 23:05

Теги

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