Как выбрать идентификаторы работы с помощью grep / sed / awk

Я запускаю задания физического анализа в компьютерной сетке. Когда-то рабочие места идут не так, и я должен их убивать (один за другим), что является болезненным. Не могли бы вы предложить мне, как я могу выбрать только числовые значения (748736838 и т. Д.) Из этого вывода:

$ps -W mhaque -748736838 0 W mhaque -748736879 0 W mhaque -748737079 0 W mhaque -748737185 0 W mhaque -748737276 0 W 

(и сотни строк, подобных этому)

Я попробовал несколько команд sed / awk / grep (из stackExchange), но не смог отделить числовые значения. Есть ли команда, которая может выбирать числовые значения, а также «убивать» перед ними? Например, что-то вроде этого (трубопровод):

 ps -W | awk/sed/grep (what_to_use) | (some_command to place "kill") | > file.list 

Который дал бы мне следующее (в файле.list):

 kill 748736838 kill 748736879 ...so on.. 

Затем я могу просто скопировать его в оболочку сетки, чтобы убить все оскорбительные / длительные задания.

Если вы хотите убить все задания mhaque , это еще проще сделать:

 pkill -9 mhaque 

( -9 – сигнал для отправки, в этом случае я выбрал SIGKILL , изменив его в соответствии с вашими потребностями).

Также,

 pidof mhaque 

возвращает простой список PID рабочих заданий, и ничего больше. Вы можете использовать его также следующим образом

 kill -9 $(pidof mhaque) 

который производит тот же эффект, что и первая команда. Все это намного проще, чем сценариев. Например,

 $ vlc fulvio.mkv &> /dev/null & [1] 28006 $ vlc fulvio.mkv &> /dev/null & [2] 28028 $ pidof vlc 28028 28006 $ pkill -9 vlc $ ps ax | grep vlc 28054 pts/18 S+ 0:00 grep --color=auto vlc [1]- Killed vlc fulvio.mkv &> /dev/null [2]+ Killed vlc fulvio.mkv &> /dev/null 

EDIT :

в ответ на пояснения, содержащиеся в комментарии, команда

 ps -W | awk '{print $2}' | cut -d"-" -f2 

создает простой список идентификаторов рабочих мест. Вы можете записать их в файл или обработать их напрямую, как

 kill -9 $(ps -W | awk '{print $2}' | cut -d"-" -f2) 

EDIT2

Я немного удивлен, что это не работает должным образом, потому что вышеприведенная команда является стандартным Bash. В какой системе вы находитесь, точно? Во всяком случае, вы можете попробовать:

  for i in $(ps -W | awk '{print $2}' | cut -d"-" -f2); do kill -9 $i; done