Regex dentro do awk do arquivo txt com uma linha

Regex dentro do awk do arquivo txt com uma linha

Atualmente estou trabalhando em um script para limpar discos rígidos. O primeiro script já está funcionando e verifica se há novos discos rígidos disponíveis. Se houver um novo disco disponível, ele será listado em a statuslist.txte usado areca_cli disk create drv=Xpara ativá-lo Pass Through.

Todos statuslist.txtos novos discos são armazenados por número de slot e tipo de modelo. Infelizmente, todas as entradas são listadas em uma linha, em vez de cada entrada por linha. Acho que isso está complicando as coisas para futuros trabalhos com o statuslist.txt.

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

Para o statuslist.txteu uso o seguinte comando.

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

Este é o segundo script para limpar discos rígidos listados em statuslist.txt.

A instrução if verifica se alguma entrada está no statuslist.txtentão usa ddpara apagá-la.

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

Minhas expectativas para este script são que ele seja usado ddapenas em discos rígidos do formato statuslist.txt. O objetivo desta lista é evitar a limpeza de discos rígidos já apagados. As entradas para discos rígidos apagados serão excluídas do arquivo de texto.

O problema que tenho é o regex para esta variável. x=$(cat /home/user/statuslist.txt | awk '{if ( $0 ~/slot#*/) print $1}')

Eu não recebo nenhuma saída.

Responder1

Você precisa percorrer os campos:

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

(isso também corrige o erro de digitação do “slot”, caso seja significativo).

Não tenho certeza de como você está tentando usar isso no loop subsequente, você não está mudando sdxconforme muda x...

informação relacionada