Regex dentro de awk desde un archivo txt con una línea

Regex dentro de awk desde un archivo txt con una línea

Actualmente estoy trabajando en un script para borrar discos duros. El primer script ya está funcionando y comprueba si hay nuevos discos duros disponibles. Si hay un nuevo disco disponible, lo incluirá en a statuslist.txty lo usará areca_cli disk create drv=Xpara configurarlo Pass Through.

Dentro de statuslist.txttodos los discos nuevos se almacenan por número de ranura y tipo de modelo. Lamentablemente, todas las entradas se enumeran en una línea en lugar de cada entrada por línea. Creo que esto está complicando las cosas para seguir trabajando con statuslist.txt.

Entradas: Slot#1 ST3500413AS Slot#2 SEAGATE ST32000444SS Slot#3 INTEL SSDSC2BA100G3 Slot#6 ST320LT007-9ZV142 Slot#8 SEAGATE ST32000444SS

Para el statuslist.txtuso el siguiente comando.

slist=$(areca_cli disk info | awk -F "   *" '{if ($5 != "N.A." && $7 == "Free") print($4" "$5); }')
echo $slist >> /home/user/statuslist.txt

Este es el segundo script para borrar discos duros que figuran en statuslist.txt.

La declaración if verifica si hay entradas en el statuslist.txtluego las usa ddpara borrarlas.

sdx=$(lsscsi | awk '{if ($5 == "R001" && $5 != "-" ) print $NF}' | awk '{ print $0}')
x=$(cat /home/user/statuslist.txt | awk '{if ( $1 ~/slot#*/)print $1}')

if [ ${#wipe[@]} -gt 0 ]; then
        for i in $x; do dd if=/dev/zero of=$sdx bs=10M status=progress; done
        echo "Following hard drives are getting wiped:" $x
else
        echo "dd didn't work"
fi

Mis expectativas para este script son que se use ddsolo en discos duros del formato statuslist.txt. El propósito de esta lista es evitar volver a borrar discos duros ya borrados. Las entradas de los discos duros borrados se eliminarán del archivo de texto.

El problema que tengo es la expresión regular de esta variable. x=$(cat /home/user/statuslist.txt | awk '{if ( $0 ~/slot#*/) print $1}')

No obtengo ningún resultado.

Respuesta1

Necesitas recorrer los campos:

x=$(awk '{ for (i = 1; i < NF; i++) { if ($i ~ /^Slot#/) { print $(i + 1) } } }' /home/user/statuslist.txt)

(Esto también corrige el error tipográfico de "ranura", las mayúsculas y minúsculas son importantes).

No estoy seguro de cómo intentas usar eso en el ciclo siguiente, no estás cambiando sdxa medida que cambias x...

información relacionada