한 줄로 된 txt 파일의 awk 내의 정규식

한 줄로 된 txt 파일의 awk 내의 정규식

현재 하드 드라이브를 지우는 스크립트를 작성 중입니다. 첫 번째 스크립트는 이미 작동 중이며 사용 가능한 새 하드 드라이브가 있는지 확인합니다. 사용 가능한 새 디스크가 있으면 이를 에 나열하고 이를 설정하는 데 statuslist.txt사용합니다 .areca_cli disk create drv=XPass 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)

(이것은 "슬롯" 오타도 수정합니다. 대소문자가 중요합니다).

후속 루프에서 이를 어떻게 사용하려고 하는지 잘 모르겠습니다. sdx변경해도 변경되지 않습니다 x.

관련 정보