AWK印刷を使用してデータを表形式で指定する

AWK印刷を使用してデータを表形式で指定する

macOSで実行されている上位10のプロセスを印刷するコードを書こうとしています。ただし、このコードを実行すると、top -l 1 -u -o cpu -n10 | awk 'NR==12, NR==22 {print $2,$3,$8}';出力は行と列で構成される表形式では構成されません。出力形式をどのように指定しますか?

PS私はこれを試しましたが、top -l 1 -u -o cpu -n10 | awk 'BEGIN {printf("%s %10s %8s \n" ,"NAME", "%CPU", "MEM")} {printf("%s %10f %8s\n",NR==12, NR==22, $2, $3, $8)}';やはり動作しませんでした(正確なデータも表示しませんでした)。

ベストアンサー1

これが私が得るものです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+

おすすめ記事