最後の英数字を同じタイプのランダム文字に置き換えます。

最後の英数字を同じタイプのランダム文字に置き換えます。

ファイルに単純な英数字のマシン名のリストがあり、最後の文字または数字を変更したいのですが、文字の種類と一致するようにしたいと思います。したがって、最後の文字が数字の場合は、任意の数字に置き換える必要があります。最後の文字は文字なので、任意の文字に置き換える必要があります。

bob1234
pittsburgh
0091919

になります:

bob1239
pittsburgp
0091915

ベストアンサー1

努力する:

awk '
  BEGIN{
    srand()
    letter = "abcdefghijklmnopqrstuvwxyz"
    digit  = "0123456789"
  }
  function find_in(set) {
    if (index(set, c)) {
      c = substr(set, int(rand() * length(set) + 1), 1)
      return 1
    }
  }
  $0 != "" {
    c = substr($0, length)
    if (find_in(letter) || find_in(digit)) sub(/.$/, c)
  }
  {print}'

ほとんどのawk実装では、同じ秒以内にこれらのコマンドを2回実行すると、疑似乱数ジェネレータが現在の時間(秒)に基づいてシードされるため、同じ結果が得られます。

代替文字はランダムなので、元の文字と同じにすることができます。可能な代替リストから元のバージョンを除外するには、find_in機能を次のように変更できます。

  function find_in(set,   n) {
    if (n = index(set, c)) {
      set = substr(set, 1, n - 1) substr(set, n + 1)
      c = substr(set, int(rand() * length(set) + 1), 1)
      return 1
    }
  }

おすすめ記事