
Ya hice esta pregunta, pero sin actualizar. Creo que esta información debería estar relacionada con esto site
. Necesito fusionar dos salidas en Linux. Este:
lsblk -n -b --output KNAME,NAME,SIZE,MOUNTPOINT | grep -v "fd0" | grep -v "loop" | grep -v "sr0" | grep -v "hdc" | grep -v "cdrom"
Como resultado tengo:
sda sda 53687091200
sda1 └─sda1 53684994048
dm-3 └─dockerVG-rootLV 53682896896 /
sdb sdb 2147483648000
sdb1 └─sdb1 2147482599424
dm-1 ├─hddVG-dockerLV 536866717696 /var/lib/docker
dm-2 └─hddVG-hddLV 1610612736000 /dockerhdd
sdc sdc 536870912000
sdc1 └─sdc1 536869863424
dm-0 └─ssdVG-ssdLV 536866717696 /dockerssd
Y esto:
df --exclude={tmpfs,devtmpfs,squashfs,overlay} | sed -e /^Filesystem/d | awk '{print $6 " " $1 " " $3 " " $4 " " $5}'
Como resultado, tengo:
/ /dev/mapper/dockerVG-rootLV 8110496 40591632 17%
/dockerssd /dev/mapper/ssdVG-ssdLV 214133656 274642488 44%
/dockerhdd /dev/mapper/hddVG-hddLV 83278236 1385191240 6%
/var/lib/docker /dev/mapper/hddVG-dockerLV 76046204 412729940 16%
Entonces, quiero unirme a través de estos puntos /
,,,, . ¡Importante! Quiero comprobar esto en otro lugar, donde tendremos otros puntos de montaje. También tengo que guardar la estructura del primer resultado sin ordenar./var/lib/docker
/dockerhdd
/dockerssd
Como resultado tengo que recibir algo como esto:
sda sda 53687091200
sda1 └─sda1 53684994048
dm-3 └─dockerVG-rootLV 53682896896 / /dev/mapper/dockerVG-rootLV 8110496 40591632 17%
sdb sdb 2147483648000
sdb1 └─sdb1 2147482599424
dm-1 ├─hddVG-dockerLV 536866717696 /var/lib/docker /dev/mapper/hddVG-dockerLV 76046204 412729940 16%
dm-2 └─hddVG-hddLV 1610612736000 /dockerhdd /dev/mapper/hddVG-hddLV 83278236 1385191240 6%
sdc sdc 536870912000
sdc1 └─sdc1 536869863424
dm-0 └─ssdVG-ssdLV 536866717696 /dockerssd /dev/mapper/ssdVG-ssdLV 214133656 274642488 44%
Alguna persona de stackoverflow
me ayudó a través de AWK
, pero su respuesta no me ayudó. También he cambiado un poco su mando.
awk '/^dm-*/ || /^sd*/ || /^xvd*/ { print $0" "arr[$5] } /^Filesystem/ { mrk=1;next } mrk==1 { arr[$6]=$0 }' <<< $(df --exclude={tmpfs,devtmpfs,squashfs,overlay};lsblk -n -b --output KNAME,NAME,SIZE,MOUNTPOINT)
Pero como resultado, tengo
sda sda 53687091200 fd0 fd0 4096
sda1 └─sda1 53684994048 sda sda 53687091200
dm-3 └─dockerVG-rootLV 53682896896 / sda1 └─sda1 53684994048
sdb sdb 2147483648000 dm-3 └─dockerVG-rootLV 53682896896 /
sdb1 └─sdb1 2147482599424 sdb sdb 2147483648000
dm-1 ├─hddVG-dockerLV 536866717696 /var/lib/docker sdb1 └─sdb1 2147482599424
dm-2 └─hddVG-hddLV 1610612736000 /dockerhdd dm-1 ├─hddVG-dockerLV 536866717696 /var/lib/docker
sdc sdc 536870912000 dm-2 └─hddVG-hddLV 1610612736000 /dockerhdd
sdc1 └─sdc1 536869863424 sdc sdc 536870912000
dm-0 └─ssdVG-ssdLV 536866717696 /dockerssd sdc1 └─sdc1 536869863424
Quiero recibir esto:
sda sda 53687091200
sda1 └─sda1 53684994048
dm-3 └─dockerVG-rootLV 53682896896 / /dev/mapper/dockerVG-rootLV 8110496 40591632 17%
sdb sdb 2147483648000
sdb1 └─sdb1 2147482599424
dm-1 ├─hddVG-dockerLV 536866717696 /var/lib/docker /dev/mapper/hddVG-dockerLV 76046204 412729940 16%
dm-2 └─hddVG-hddLV 1610612736000 /dockerhdd /dev/mapper/hddVG-hddLV 83278236 1385191240 6%
sdc sdc 536870912000
sdc1 └─sdc1 536869863424
dm-0 └─ssdVG-ssdLV 536866717696 /dockerssd /dev/mapper/ssdVG-ssdLV 214133656 274642488 44%
Respuesta1
La mejor opción sería un script de shell simple. Puede producir frases extrañas e incomprensibles, pero es mejor mantener un script de shell comprensible.
#!/bin/bash
df -h --exclude={tmpfs,devtmpfs,squashfs,overlay} | sed -e /^Filesystem/d | awk '{print $6 " " $1 " " $3 " " $4 " " $5}' > /tmp/dinges.$$
lsblk -n -b --output KNAME,NAME,SIZE,MOUNTPOINT | egrep -v "fd0|loop|sr0|hdc|cdrom" |
while read kname name size mountpoint ; do
printf '%-5s' "$kname"
printf '%-20s' "$name"
printf '%15d' "$size"
printf '%-10s' "$mountpoint"
if [ "$mountpoint" != "" ] ; then
grep "$mountpoint " /tmp/dinges.$$
else
echo
fi
done
rm /tmp/dinges.$$
Ahora comprenda que esta es una escritura rápida. Hay muchos problemas con este script (como espacios en los nombres de los puntos de montaje), pero debería darle una idea de qué hacer.