현재 LUKS 장치를 더 쉽게 설치할 수 있도록 스크립트를 작성 중입니다. 스크립트에는 기본 마운트 지점 이름( )이 있지만 data_1
이러한 마운트 지점이 이미 존재하는 경우 아직 마운트 지점이 아닌 문자열을 찾을 때까지 숫자 접미사를 늘리고 다시 테스트하는 등의 작업을 수행하고 싶습니다. .
예를 들어 다음과 같이 마운트 지점을 나열할 수 있습니다 lsblk -o MOUNTPOINTS
.
출력은 다음과 같다고 가정합니다.
/
/boot
/mnt/data_1
/mnt/data_2
/mnt/data_3
/var/lib/docker
내 기본 마운트 지점 이름은 입니다 data_1
. 이제 유효한 새 마운트 지점 이름을 얻고 싶습니다. 이 경우에는 , data_4
왜냐하면 및 이(가 data_1
) 이미 존재 하기 때문입니다 . 이와 같이 증가하는 이름을 얻는 가장 쉬운 방법은 무엇입니까? 내가 이상한 마법을 부릴 수 있을 거라 생각했나요?data_2
data_3
답변1
정말 awk
생명을 구할 수 있습니다. 이 코드 조각에서 마운트 지점 앞에는 data
밑줄로 일련 번호가 붙고 구분됩니다.
awk -F '_' -v mp='data' '
BEGIN { re = "^(.*/)?" mp FS "[0-9]+$" } # Build a RE to match relevant mountpoints
$0 ~ re && $NF > x { x = $NF } # Save the highest sequence number
END { print mp FS x+1 } # Print the next value
'
예제의 출력
data_4
또는 설정하면 둘 다 괜찮 mp='/mnt/data'
습니다 /mnt/data_4
.
답변2
$ awk -v base='/mnt/data_' 'sub(base,"") && ($1>max){max=$1} END{print base max+1}' file
/mnt/data_4