Shell-Script

使用 awk 增加掛載點名稱

  • October 14, 2021

我目前正在編寫一個腳本,可以更輕鬆地安裝 LUKS 設備。在腳本中,我確實有一個預設的掛載點名稱data_1

例如,我可以像這樣列出掛載點lsblk -o MOUNTPOINTS

讓我們假設輸出是:

/
/boot
/mnt/data_1
/mnt/data_2
/mnt/data_3
/var/lib/docker

我的預設掛載點名稱是data_1. 現在我想獲得一個有效的新掛載點名稱。在這種情況下,這將是data_4,因為data_1data_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

引用自:https://unix.stackexchange.com/questions/673139