Можно выполнить с помощью awk:
awk '
# define a long block
BEGIN{
long = 10;
}
# output long block when new block is found
($1 == "query" && n >= long){
print s;
}
# new block
($1 == "query"){
s = "";
n = 0;
}
# all lines
{
s = (s != "") ? s "\n" $0 : $0;
n++;
}
# output the long block if it is the last one in the file
END{
if (n >= long){
print s;
}
}
' input.file > output.file
Используйтеpgrep
вместо фильтрации вывода из ps
. Я думаю, что в вашем случае pgrep -f '^([^ ]*/)?puma '
будет соответствовать правильному процессу, но немного поэкспериментируйте, чтобы убедиться, что вы получаете то, что хотите, и не более того.
Как только вы убедитесь, что pgrep
находит процесс, который вы хотите убить, замените pgrep
на pkill
.
Вы можете сделать это с помощью команды ps следующим образом:
ps -ef | grep puma | grep -v grep | grep -v cluster | awk '{print $2}' | xargs kill
Объяснение:
ps:дает информацию о процессе
grep:фильтрует предоставленную строку
grep -v:удаляет запись с совпадающими записями
awk '{print $2}':возвращает второй элемент строки
xargs:преобразует введенные данные в аргументы для следующей за ними команды