我有一个文本文件,除了其他数据之外,还有多次出现的字符串,其中附加了一个随机数(在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
任何人都可以帮助我获得所需的输出吗?
答案 0 :(得分: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)
我想我的问题并不清楚。我希望它只能替换 “string + number”的实例不是文件中的所有数字 文件中的其他数据
保持简单,无需设置FS:
awk '{for(i=1;i<=NF;i++) sub(/string[0-9]*/,"string"int(10*rand()),$i)}1' file
查找"string"
加上许多[0-9]
,然后替换为"string"
加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