awk의 정규 표현식은 txt 파일에서 한 줄로 나옵니다.

awk의 정규 표현식은 txt 파일에서 한 줄로 나옵니다.

저는 현재 하드 드라이브를 지우는 스크립트를 작성 중입니다. 첫 번째 스크립트가 작동하기 시작했고 새 하드 드라이브를 사용할 수 있는지 확인합니다. 새 디스크를 사용할 수 있으면 에 나열되고 statuslist.txtareca_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.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

이 스크립트에서 제가 기대하는 바는 ddstatuslist.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...

관련 정보