Я работаю над скриптом, который должен анализировать данные, возвращаемые командой ps
. Я знаю, что в Redhat/Centos легко указать разделитель столбцов, но с BSD-версия PS, это не так просто.
Я знаю, что можно было бы использовать awk
, sed
или tr
для замены пробелов любым символом, но допустим, формат имеет args
или comm
где-то посередине, вывод будет таким:
$ ps -o pid,ppid,args,user | head
PID PPID ARGS USER
60140 494 /Applications/iTerm.app/Contents/MacOS/iTerm2 --server login -fp jdoe
60144 60141 -bash jdoe
55574 494 /Applications/iTerm.app/Contents/MacOS/iTerm2 --server login -fp jdoe
55576 55575 -bash jdoe
20710 494 /Applications/iTerm.app/Contents/MacOS/iTerm2 --server login -fp jdoe
20712 20711 -bash jdoe
66703 494 /Applications/iTerm.app/Contents/MacOS/iTerm2 --server login -fp jdoe
66707 66704 -bash jdoe
66881 494 /Applications/iTerm.app/Contents/MacOS/iTerm2 --server login -fp jdoe
Как видите, данные в столбце args
могут содержать пробелы, что сбивает все с толку.
Что действительно раздражает, так это то, что я на самом деле нашел решение, которое, казалось, работает просто отлично, без необходимости делать что-то вроде добавления args
в конец вывода, но я не могу вспомнить решение или найти его снова.
Я подумал, что, возможно, можно было бы использовать строку заголовка столбца для определения ширины столбца, поскольку заголовки выравниваются с данными столбца, но я уверен, что есть более простое решение.
Любая помощь будет оценена по достоинству. Спасибо!
args
в качестве последнего столбца и читать данные с помощьюAwk
? Вы можете использовать его таким образом? - person Inian   schedule 28.02.2017ps
для SuSE Linux, а не версию OS X или любую текущую версию FreeBSD. - person ghoti   schedule 04.03.2017ps
. - person Mark Setchell   schedule 04.03.2017