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

関連情報