使用 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_1data_2并且data_3已经存在。获得像这样递增的名称的最简单方法是什么?我想我也许可以做一些 awk 魔法?

答案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

相关内容