Bash 脚本在每行数据块之后插入信息

Bash 脚本在每行数据块之后插入信息

我希望编写一个脚本,将信息从 /proc 文件系统插入到由 top 生成的进程列表中。它会是这样的:

这是我从顶部获得的示例输出:

[root@alxc5 ~]# top -n 1 -c | sed '1,7d' | head -n10
20245 1842      20   0  233m  42m  10m R 100.0  0.0   0:00.71 /usr/local/php53/bin/php index.php
19302 1842      20   0  277m  86m  10m R 100.0  0.0   0:01.81 /usr/local/php53/bin/php index.php
20153 1842      20   0  264m  79m  10m R 96.6  0.0   0:00.89 /usr/local/php54/bin/php admin-ajax.php
14390 1842      20   0  228m  43m  10m R 93.6  0.0   0:04.92 /usr/local/php54/bin/php productbrandwithoutsoap.php
20047 1841      20   0  240m  54m  10m R 90.7  0.0   0:01.29 /usr/local/php54/bin/php index.php
20117 1842      20   0  273m  87m  10m R 83.4  0.0   0:01.07 /usr/local/php54/bin/php edit.php
20295 1841      20   0  202m  36m   9m R 80.5  0.0   0:00.55 /usr/local/php53/bin/php index.php
15978 1843      20   0  259m  71m  10m S 58.5  0.0   0:02.70 /usr/local/bin/php /home/groupwa4/public_html/cron.php -mdefault
18745 1842      20   0  247m  56m  11m R 46.8  0.0   0:02.30 /usr/local/bin/php /home/sukhirug/public_html/cron.php -mdefault
10234 1842      20   0  306m  92m  43m R 42.4  0.0   1:14.51 /usr/local/php53/bin/php
[root@alxc5 ~]#

这是我希望的最终结果:

[root@alxc5 ~]# top -n 1 -c | sed '1,7d' | head -n10
20245 1842      20   0  233m  42m  10m R 100.0  0.0   0:00.71 /usr/local/php53/bin/php index.php
^- Process running in $proc_info

其中 $proc_info 类似于:

[root@alxc5 ~]# egrep "c[0-9]{1,5}" /proc/28339/mounts -o |uniq
c8798
[root@alxc5 ~]#

这是/proc/28339/mounts的原始内容:

[root@alxc5 ~]# cat /proc/28339/mounts
rootfs / rootfs rw 0 0
/dev/mapper/coregroup-c8798 / ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
/dev/sda3 /proc/loadavg ext4 rw,relatime,data=ordered 0 0
/dev/sda3 /proc/cpuinfo ext4 rw,relatime,data=ordered 0 0
devpts /dev/pts devpts rw,relatime,gid=1342,mode=620,ptmxmode=666 0 0
/dev/mapper/coregroup-c8798 /chroot/tmp ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/baseos/chroot ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/baseos/chroot/tmp ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/admintes ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/admintes/chroot ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/admintes/chroot/tmp ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/admintes/home/admintes ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/dancho ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/dancho/chroot ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/dancho/chroot/tmp ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/dancho/home/dancho ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/sgadmins ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/sgadmins/chroot ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/sgadmins/chroot/tmp ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/sgadmins/home/sgadmins ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/synthesi ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/synthesi/chroot ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/synthesi/chroot/tmp ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/synthesi/home/synthesi ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
tmpfs /dev/shm tmpfs rw,relatime,uid=1337,gid=1337 0 0
[root@alxc5 ~]#

非常感谢任何有关如何继续执行该任务的建议!

答案1

这是一种方法:

top -n 1 -c | sed '1,7d' | 
    awk '1;k=system("grep -Eo \"c[0-9]{1,5}\" /proc/$1/mounts | sort -u")'

awk首先打印每个输入行 ( ),然后在文件上1;运行。由于返回空格分隔的字段,因此将是 PID。grep -E/proc/PID/mountstop$1

既然您正在使用awk,就没有理由sed再使用。另外,您可能希望使用它top -b来获取所有内容并避免由于 ANSI 颜色转义等造成的伪影:

top -n 1 -bc | 
 awk 'NR<7{next}1;k=system("grep -Eo \"c[0-9]{1,5}\" /proc/$1/mounts | sort -u")'

答案2

以防万一它适合您的用例:

man top

3. 字段/列

下面列出了top可用的过程字段(列)。它们按严格的 ascii 字母顺序显示。您可以自定义它们的位置以及它们是否可以用 或 来f显示F (田间管理)交互式命令。

...

11. LXC  -- Lxc 容器名称

lxc运行任务的容器的名称。如果进程未在容器内运行,则破折号( -)将显示。

我已经很长时间没有使用lxc容器了,并且没有特别动力再次设置它来仔细检查是否LXC字段与您正在寻找的内容完全一致,但它确实声音正确的。

相关内容