Regex innerhalb von awk aus einer TXT-Datei mit einer Zeile

Regex innerhalb von awk aus einer TXT-Datei mit einer Zeile

Ich arbeite gerade an einem Skript zum Löschen von Festplatten. Das erste Skript funktioniert bereits und prüft, ob neue Festplatten verfügbar sind. Wenn eine neue Festplatte verfügbar ist, wird sie in einer Liste aufgeführt statuslist.txtund mithilfe areca_cli disk create drv=Xvon auf eingestellt Pass Through.

Darin statuslist.txtwerden alle neuen Datenträger nach Steckplatznummer und Modelltyp sortiert. Leider werden alle Einträge in einer Zeile aufgelistet und nicht jeder Eintrag pro Zeile. Ich denke, das erschwert die weitere Arbeit mit dem statuslist.txt.

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

Hierzu statuslist.txtverwende ich folgenden Befehl.

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

Dies ist das zweite Skript zum Löschen der in aufgelisteten Festplatten statuslist.txt.

Die if-Anweisung prüft, ob Einträge vorhanden sind, und löscht diese statuslist.txtdann .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

Meine Erwartung an dieses Skript ist, dass es ddnur auf Festplatten aus der statuslist.txt. Der Zweck dieser Liste ist es, das erneute Löschen bereits gelöschter Festplatten zu vermeiden. Die Einträge für gelöschte Festplatten werden aus der Textdatei gelöscht.

Das Problem, das ich habe, ist der reguläre Ausdruck für diese Variable. x=$(cat /home/user/statuslist.txt | awk '{if ( $0 ~/slot#*/) print $1}')

Ich bekomme keine Ausgabe.

Antwort1

Sie müssen eine Schleife über die Felder ausführen:

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

(dadurch wird auch der Tippfehler „Slot“ behoben, Groß-/Kleinschreibung ist wichtig).

Ich bin nicht sicher, wie Sie versuchen, das in der nachfolgenden Schleife zu verwenden, Sie ändern sich nicht, sdxwährend Sie sich ändern x...

verwandte Informationen