我目前正在编写一个脚本,使 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 魔法?
答案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