Регулярное выражение в awk из txt-файла с одной строкой

Регулярное выражение в awk из txt-файла с одной строкой

В настоящее время я работаю над скриптом для стирания жестких дисков. Первый скрипт уже работает и проверяет, есть ли новые жесткие диски. Если есть новый диск, он перечислит его в statuslist.txtи использует areca_cli disk create drv=Xдля установки на Pass Through.

Внутри statuslist.txtвсе новые диски хранятся по номеру слота и типу модели. К сожалению, все записи перечислены в одну строку, а не каждая запись в строке. Я думаю, что это усложняет дальнейшую работу с statuslist.txt.

Записи: Slot#1 ST3500413AS Slot#2 SEAGATE ST32000444SS Slot#3 INTEL SSDSC2BA100G3 Slot#6 ST320LT007-9ZV142 Slot#8 SEAGATE ST32000444SS

Для этого statuslist.txtя использую следующую команду.

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

Это второй скрипт для очистки жестких дисков, перечисленный в statuslist.txt.

Оператор if проверяет, есть ли какие-либо записи, statuslist.txtа затем использует ddих для стирания.

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

Мои ожидания от этого скрипта таковы, что он будет использоваться ddтолько на жестких дисках из statuslist.txt. Цель этого списка — избежать повторной очистки уже очищенных жестких дисков. Записи для очищенных жестких дисков будут удалены из текстового файла.

Проблема, с которой я столкнулся, заключается в регулярном выражении для этой переменной. x=$(cat /home/user/statuslist.txt | awk '{if ( $0 ~/slot#*/) print $1}')

Я не получаю никакого результата.

решение1

Вам необходимо выполнить цикл по полям:

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

(это также исправляет опечатку «slot», регистр имеет значение).

Я не уверен, как вы пытаетесь использовать это в последующем цикле, вы же не меняетесь, sdxкогда меняетесь x...

Связанный контент