Сценарий Bash для вставки информации после каждой строки блока данных

Я хочу написать сценарий, который будет вставлять информацию из файловой системы / proc в список процессов, сгенерированных сверху. Это было бы примерно так:

Вот пример вывода, который я получаю сверху:

[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 ~]# 

Любые предложения о том, как действовать с этой задачей, высоко ценятся!

Вот один из способов:

 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; ), затем запустит grep -E в файле /proc/PID/mounts . Поскольку top возвращает поля, разделенные пробелами, $1 будет PID.

Поскольку вы используете 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")' 

На всякий случай он подходит для вашего случая использования:

 man top 

3. Поля / столбцы

Ниже перечислены top доступные поля процесса (столбцы) . Они показаны в строгом алфавитном порядке в алфавитном порядке. Вы можете настроить их положение и отображать ли они их с помощью интерактивных команд f или F (Fields Management) .

11. Название контейнера LXC – Lxc

Имя контейнера lxc в котором выполняется задача. Если процесс не запущен внутри контейнера, будет отображаться тире ( - ) .

Я долгое время не использовал контейнер lxc , и не чувствую особой мотивации, чтобы снова настроить его, чтобы проверить, идеально ли поле LXC идеально подходит к тому, что вы ищете, но это звучит правильно.