awkの正規表現はtxtファイルから1行になります。

awkの正規表現はtxtファイルから1行になります。

私は現在ハードドライブを消去するスクリプトを書いています。最初のスクリプトが機能し始め、新しいハードドライブが利用可能であることを確認します。新しいディスクが利用可能な場合は、にリストされ、に設定さstatuslist.txtareca_cli disk create drv=XますPass Through

すべてのstatuslist.txt新しいディスクは、スロット番号とモデルタイプ別に保存されます。残念ながら、すべての項目は、1行に1つの項目ではなく1行に表示されます。私の考えでは、これが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

これは、ハードドライブの消去に記載されている2番目のスクリプトですstatuslist.txt

if ステートメントは、statuslist.txtthen にエントリがあることを確認して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)

(これはまた「スロット」スペルエラー、つまり問題を修正します)。

後続のループでこれをどのように使用しようとしているのかわかりません。sdx変更しても変更されませんx...

おすすめ記事