2013-10-25 78 views
1

我有一個文本文件,除了其他數據之外,還有多次出現的附加了隨機數(0到n之間)的字符串。例如:如何用相同的字符串和隨機數字替換字符串和數字使用sed/awk?

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 

任何人都可以幫助我獲得所需的輸出嗎?

回答

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"加上許多[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 
+0

+1哇,這被稱爲即時回答:P – anubhava

+0

我想我是不是清楚我的問題。我希望它只替換文件中所有數字的「字符串+數字」實例,因爲文件 – hellocatfood

+0

@hellocatfood uhms中有其他數據,輸入數據使我認爲它只是「字符串」。檢查我更新的答案,我對前代碼做了一些更改。 – fedorqui

相關問題