Правильно найдите желаемое поле от операции сокращения

У меня есть такое выполнение процессов

me   26175  1.7  2.5 1483984 100148 tty2   Sl+  12:49   0:04 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat
me   26237  0.0  0.7 311516 29176 tty2     S+   12:49   0:00 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat --type=zygote --no-sandbox
me   26276  0.2  2.0 550496 81800 tty2     Sl+  12:49   0:00 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat --type=gpu-process --channel=26175.0.1924433599 --mojo-application-channel-token=3E65B226573BBE452FCCE4212BC242ED --no-sandbox --window-depth=24 --x11-visual-id=33 --supports-dual-gpus=false --gpu-driver-bug-workarounds=5,18,56 --gpu-vendor-id=0x0000 --gpu-device-id=0x0000 --gpu-driver-vendor --gpu-driver-version --gpu-driver-date --v8-natives-passed-by-fd --v8-snapshot-passed-by-fd
me   26284  0.2  3.8 1085556 150812 tty2   Sl+  12:49   0:00 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat --type=renderer --no-sandbox --primordial-pipe-token=85EEA61A3C800C4096858B6AE571B4EB --lang=en-US --node-integration=true --enable-pinch --num-raster-threads=2 --content-image-texture-target=3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553 --video-image-texture-target=3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553 --disable-accelerated-video-decode --mojo-channel-token=F13ADFBA9E2E351C09B10692D10BCFBE --mojo-application-channel-token=85EEA61A3C800C4096858B6AE571B4EB --channel=26175.1.78915562 --v8-natives-passed-by-fd --v8-snapshot-passed-by-fd

Я требую получить использование pid столбца cut вместо усовершенствованных инструментов как gwak

 ps -aux | grep wechat | sed "s/$USER/me/g" | cut -f 2 | head -n 4 
me   26175  1.2  2.5 1483984 100220 tty2   Sl+  12:49   0:05 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat
me   26237  0.0  0.7 311516 29176 tty2     S+   12:49   0:00 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat --type=zygote --no-sandbox
me   26276  0.1  2.0 550496 81800 tty2     Sl+  12:49   0:00 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat --type=gpu-process --channel=26175.0.1924433599 --mojo-application-channel-token=3E65B226573BBE452FCCE4212BC242ED --no-sandbox --window-depth=24 --x11-visual-id=33 --supports-dual-gpus=false --gpu-driver-bug-workarounds=5,18,56 --gpu-vendor-id=0x0000 --gpu-device-id=0x0000 --gpu-driver-vendor --gpu-driver-version --gpu-driver-date --v8-natives-passed-by-fd --v8-snapshot-passed-by-fd
me   26284  0.1  3.8 1085556 150812 tty2   Sl+  12:49   0:00 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat --type=renderer --no-sandbox --primordial-pipe-token=85EEA61A3C800C4096858B6AE571B4EB --lang=en-US --node-integration=true --enable-pinch --num-raster-threads=2 --content-image-texture-target=3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553 --video-image-texture-target=3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553 --disable-accelerated-video-decode --mojo-channel-token=F13ADFBA9E2E351C09B10692D10BCFBE --mojo-application-channel-token=85EEA61A3C800C4096858B6AE571B4EB --channel=26175.1.78915562 --v8-natives-passed-by-fd --v8-snapshot-passed-by-fd

Это приходит к заключению, что выводы не разграничены вкладками, затем попробовали пространство

me@host:~$ ps -aux | grep wechat | sed "s/$USER/me/g" | cut -d ' ' -f 2 | head -n 4 




me@host:~$ 

Но получите объемы пробелов, и pid, загадочно располагаются в поле 4

me@host:~$ ps -aux | grep wechat | sed "s/$USER/me/g" | cut -d ' ' -f 4 | head -n 4 
26175
26237
26276
26284
me@host~$ 

Я очень смущен здесь, как я мог решить который поле сократить без "метода проб и ошибок"?

1
задан 16 March 2019 в 08:58

1 ответ

Вы не должны использовать cut или awk вообще. grep также не рекомендуется использоваться с ps потому что не правильно созданный grep запрос будет также включать себя в вывод.

pgrep утилита может сделать задание, если Вы только интересуетесь PIDs.

$ pgrep -f wechat 
8096
8115

Если Вы интересуетесь другой информацией, ps утилита принимает список столбцов, которые это должно произвести в -o опция. pgrep утилита для нахождения процессов по имени. Таким образом то, что я лично делаю довольно часто, является этим:

pgrep -f wechat | xargs -I{} ps  -o pid,ppid,user -p {}

pgrep утилита будет искать процессы, которые имеют wechat где угодно в их командной строке. xargs передаст вывод (PIDs) к ps и разместите их в -p флаг. -I укажет, какой маркер использовать и куда в команде вывод должен быть помещен.

$     pgrep -f wechat | xargs -I{} ps  -o pid,ppid,user -p {}
  PID  PPID USER
 8096  6825 root
  PID  PPID USER
 8115  8096 root

Существует также --no-header опция избавиться от имен столбцов

$ pgrep -f wechat | xargs -I{} ps  -o pid,ppid,user --no-header  -p {}
 8096  6825 root
 8115  8096 root

Если Вы хотите посмотреть только на electronic-wechat команда, Вы могли бы хотеть использовать pgrep electronic-wechat только без использования -f

См. также man ps , конкретно раздел "STANDARD FORMAT SPECIFIERS" для списка доступных столбцов, которым можно передать -o.


Если Вы интересуетесь наблюдением непрерывно процессов, то Вы могли бы рассмотреть использование top команда, с фильтром. Можно установить один через o ключ, просмотреть тех, которых Вы устанавливаете через Ctrl+o и фильтры сброса с + ключ. Ниже снимок экрана после того, как я установил фильтр, и тот фильтр показывают с Ctrl+o

enter image description here

2
ответ дан 7 December 2019 в 13:18

Другие вопросы по тегам:

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