Shell-Script
使用 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_2
並且data_3
已經存在。獲得像這樣遞增的名稱的最簡單方法是什麼?我想我可以做一些 awk 魔術嗎?
的確,
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
. 要麼會工作。
$ awk -v base='/mnt/data_' 'sub(base,"") && ($1>max){max=$1} END{print base max+1}' file /mnt/data_4