awk를 사용하여 마운트 지점 이름을 추가하세요.

awk를 사용하여 마운트 지점 이름을 추가하세요.

현재 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_2data_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

관련 정보