1

我有一个文本文件,其中包含许多附加随机数(0-n 之间)的字符串。例如:

string1
string33
string10

等等。

我希望能够用相同的字符串替换每个字符串,但附加一个随机数(0-n 之间)。例如:

string2
string9
string12

我已经尝试过这个 nawk 脚本,但我只能让它替换文件中的所有数字。

nawk 'BEGIN{OFS=FS="";srand()}{for(i=1;i<=NF;i++)sub(/[0-9]/,("string")int(10*rand()),$i)}1' infile > outfile

另外,它替换了每个数字,因此两位数的数字最终可能是三或四。例如:

stringstring4
stringstring30
stringstring3string6

谁能帮我得到想要的输出?

4

1 回答 1

5

你几乎在那里:

$ 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
于 2013-10-25T14:14:32.190 回答