使用 awk 忽略 top 命令的前几行不起作用
Ignoring first few lines of top command with awk doesn't work
我正在尝试将 top
命令的输出保存到 csv
文件中。我想忽略 top
命令的前六行,其中包含例如 %cpu、MiB Mem 等信息。我正在使用 awk
实现如下:
$ top | awk "NR<=5 {next;} {print}
以上命令正确输出如下:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
75597 mustans+ 20 0 21100 4292 3524 R 18.8 0.0 0:00.03 top
1945 mustans+ 20 0 5035316 296380 95244 S 6.2 1.8 35:58.70 gnome-shell
以上输出是所需的输出,但几秒钟后前六行也如下所示:
top - 12:24:40 up 2 days, 23:58, 1 user, load average: 1.02, 0.83, 0.58
17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1
%Cpu(s): 1.1 us, 1.0 sy, 0.0 ni, 95.1 id, 2.8 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 15906.9 total, 2265.8 free, 7633.8 used, 6007.3 buff/cache
MiB Swap: 7629.0 total, 7625.9 free, 3.1 used. 7260.9 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
747 systemd+ 20 0 24492 13784 9336 S 3.7 0.1 0:08.20 systemd-resolve
37955 mustans+ 20 0 7648180 2.0g 63944 S 3.7 12.7 94:16.16 java
如何确保 top
命令的每个 refresh
都应使用 awk
跳过前几行。谢谢!
top 的管道输出不会在每次刷新时都重新开始,您最终会得到一长串被发送到 awk 的行。您只丢弃了前 5 行。
你可以让它重新启动并通过使用 watch 每秒自己执行它来获得你想要的东西,例如 watch -n 1 'top -n 1 | awk "NR<=5 {next;} {print}"'
虽然这可能不是完成您想要做的事情的最佳方式....您可能想看看使用 ps
之类的东西来获取您想要的信息而不是必须使用 awk.
我已经通过 ps
命令以所需格式输出,即删除最初的几行,然后将命令与 cpu %.
一起打印
ps -eo cmd,%cpu -p$(pidof process1),$(pidof process2) | awk "NR==1 {next;} {print }
我正在尝试将 top
命令的输出保存到 csv
文件中。我想忽略 top
命令的前六行,其中包含例如 %cpu、MiB Mem 等信息。我正在使用 awk
实现如下:
$ top | awk "NR<=5 {next;} {print}
以上命令正确输出如下:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
75597 mustans+ 20 0 21100 4292 3524 R 18.8 0.0 0:00.03 top
1945 mustans+ 20 0 5035316 296380 95244 S 6.2 1.8 35:58.70 gnome-shell
以上输出是所需的输出,但几秒钟后前六行也如下所示:
top - 12:24:40 up 2 days, 23:58, 1 user, load average: 1.02, 0.83, 0.58
17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1
%Cpu(s): 1.1 us, 1.0 sy, 0.0 ni, 95.1 id, 2.8 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 15906.9 total, 2265.8 free, 7633.8 used, 6007.3 buff/cache
MiB Swap: 7629.0 total, 7625.9 free, 3.1 used. 7260.9 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
747 systemd+ 20 0 24492 13784 9336 S 3.7 0.1 0:08.20 systemd-resolve
37955 mustans+ 20 0 7648180 2.0g 63944 S 3.7 12.7 94:16.16 java
如何确保 top
命令的每个 refresh
都应使用 awk
跳过前几行。谢谢!
top 的管道输出不会在每次刷新时都重新开始,您最终会得到一长串被发送到 awk 的行。您只丢弃了前 5 行。
你可以让它重新启动并通过使用 watch 每秒自己执行它来获得你想要的东西,例如 watch -n 1 'top -n 1 | awk "NR<=5 {next;} {print}"'
虽然这可能不是完成您想要做的事情的最佳方式....您可能想看看使用 ps
之类的东西来获取您想要的信息而不是必须使用 awk.
我已经通过 ps
命令以所需格式输出,即删除最初的几行,然后将命令与 cpu %.
ps -eo cmd,%cpu -p$(pidof process1),$(pidof process2) | awk "NR==1 {next;} {print }