【问题标题】:How to replace a string and number with the same string and random number using sed/awk?如何使用 sed/awk 用相同的字符串和随机数替换字符串和数字?
【发布时间】:2013-11-04 17:04:08
【问题描述】:

我有一个文本文件,其中包含许多附加随机数(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

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

【问题讨论】:

    标签: regex string bash sed awk


    【解决方案1】:

    你快到了:

    $ 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" 加上许多[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
    

    【讨论】:

    • 我想我的问题并不清楚。我希望它只替换“字符串+数字”的实例而不是文件中的所有数字,因为文件中还有其他数据
    • @hellocatfood 嗯,输入数据让我觉得它只是“字符串”。检查我更新的答案,我对以前的代码做了一些更改。
    • 有趣的是,无论我在文件上运行多少次脚本,它只会随机化一次数字。
    • @hellocatfood 我在条件中添加了*,因此它会捕获“字符串”之后的所有数字。就我而言,它每次都显示不同的数字。
    猜你喜欢
    • 2017-02-08
    • 2015-01-13
    • 2012-06-07
    • 2017-10-16
    • 2020-02-18
    • 2019-08-07
    • 1970-01-01
    • 2017-05-20
    • 2014-01-13
    相关资源
    最近更新 更多