perl -aF'(\|)' -lne 's/\h/&/ for @F[2*2,2*4]; print @F' input_file
a a|b b|c&c|d d|e&e
f f|g g|h&h|i i|j&j
Разбить текущую запись на канал |
, а также включить разделитель в поля. Следовательно, 3-е и 5-е поля становятся 2 *2 и 2 *4 полями.
Для обоих этих полей мы заменяем горизонтальный пробел \h
литералом &
. Когда закончите, просто распечатайте поля.
Вот что я получаю отtop -l 1 -u -o cpu -n10 | awk 'NR==12, NR==22 {print $2,$3,$8}';
:
COMMAND %CPU MEM
WindowServer 0.0 574M+
Google Chrome 1
kernel_task 0.0 1183M+
postbox 0.0 1027M+
Google Chrome 1186+
coreaudiod 0.0 6416K+
Google Chrome 1
Telegram 0.0 364M+
Google Chrome 1
Slack Helper 1
Это представляет собой таблицу со строками и столбцами. Если вы хотите отформатировать его лучше, вы можете передать его в column
.
top -l 1 -u -o cpu -n10 | awk 'NR==12, NR==22 {print $2,$3,$8}' | column -t
:
COMMAND %CPU MEM
WindowServer 0.0 549M+
Google Chrome 1
kernel_task 0.0 1174M+
postbox 0.0 1027M+
Google Chrome 1185+
coreaudiod 0.0 6416K+
Google Chrome 1
Telegram 0.0 365M+
Google Chrome 1
Slack Helper 1
РЕДАКТИРОВАТЬ :Поскольку top
разделяет эти поля пробелами, возникнут проблемы с анализом правильных столбцов. Настройка столбца через -stats
может быть лучше:
top -l 1 -u -o cpu -n10 -stats command,cpu,mem | awk '/COMMAND/{y=1;next}y'
WindowServer 0.0 560M+
Google Chrome He 0.0 402M+
kernel_task 0.0 1170M+
postbox 0.0 1027M+
Google Chrome 0.0 235M+
coreaudiod 0.0 6408K+
Google Chrome He 0.0 161M+
Telegram 0.0 364M+
Google Chrome He 0.0 107M+
Slack Helper (Re 0.0 307M+
Пробовал с помощью команды ps. Возможность получить вывод в виде таблицы.
ps axo command,%cpu,%mem|awk 'NR <=11'
COMMAND %CPU %MEM
/usr/lib/systemd/systemd -- 1.0 1.3
[kthreadd] 0.0 0.0
[ksoftirqd/0] 0.0 0.0
[kworker/0:0] 0.0 0.0
[kworker/0:0H] 0.0 0.0
[kworker/u2:0] 0.0 0.0
[migration/0] 0.0 0.0
[rcu_bh] 0.0 0.0
[rcu_sched] 0.2 0.0
[watchdog/0] 0.0 0.0