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