你几乎在那里:
$ nawk 'BEGIN{OFS=FS="";srand()}{for(i=1;i<=NF;i++)sub(/[0-9]/,int(10*rand()),$i)}1' infile
string5
string89
string57
$ nawk 'BEGIN{OFS=FS="";srand()}{for(i=1;i<=NF;i++)sub(/[0-9]/,int(10*rand()),$i)}1' file
string6
string08
string37
注意我刚刚替换了这个:
sub(/[0-9]/,("string")int(10*rand()),$i)
^^^^^^^^^^
和:
sub(/[0-9]/,int(10*rand()),$i)
更新
我想我的问题并不清楚。我希望它只替换“字符串+数字”的实例而不是文件中的所有数字,因为文件中还有其他数据
保持简单,无需设置 FS:
awk '{for(i=1;i<=NF;i++) sub(/string[0-9]*/,"string"int(10*rand()),$i)}1' file
寻找"string"
plus many[0-9]
然后用"string"
plus替换random
。
测试
$ cat a
string1
string33
string10
hello2
$ awk '{for(i=1;i<=NF;i++) sub(/string[0-9]*/,"string"int(10*rand()),$i)}1' a
string1
string7
string4
hello2
$ awk '{for(i=1;i<=NF;i++) sub(/string[0-9]*/,"string"int(10*rand()),$i)}1' a
string9
string3
string5
hello2