2015-10-17 16 views
-2

我在這個格式的文件:理線具有數字和字符串文本文件shell腳本

2ThroughputRule.js:128 bw 3545891 3545891 3545891 
ThroughputRule.js:128 bw 124776 1835334 1151111 
ThroughputRule.js:128 bw 1959606 1876758 2435492 
ThroughputRule.js:128 bw 3213333 1765905 2979981 
2ThroughputRule.js:128 bw 1985927 2386289 2284143 

我想要的方式來處理文件,以便shell腳本可以讀取每一行的第一個字符並且如果它發現一個數字複製該次數從該次數到下一個EOL的次數。

比如我有

2ThroughputRule.js:128體重3545891 3545891 3545891

這樣做的結果將是

2ThroughputRule.js:128體重3545891 3545891 3545891

ThroughputRule。 js:128 bw 3545891 3545891 3545891

如果我有

4ThroughputRule.js:128 BW 3545891 3545891 3545891

ThroughputRule.js:128 BW 3545891 3545891 3545891

ThroughputRule.js:128 BW 3545891 3545891 3545891

ThroughputRule.js:128 BW 3545891 3545891 3545891

有沒有可能這樣做?

+0

我編輯了我的問題,謝謝 –

回答

0

你可以試試這個程序。另存爲pr.awk。並運行awk -f pr.awk test.txt

function force_num(x) {return x+0} 

match($0, "^[0-9]+") { 
    n = substr($0, RSTART, RLENGTH) 
    n = force_num(n) 

    rst = substr($0, RSTART + RLENGTH) 
    for (i=1; i<=n; i++) 
     print rst 

    next 
} 

{ 
    print 
} 
+0

但它並不總是2有時是diferente數字,我可以在那裏做什麼? –

+0

@MiguelA.AguayoOrtuño查看更新。 – slitvinov

0

您可以使用此awk命令:

awk '1; /^[0-9]/{print substr($0,2)}' file 
2ThroughputRule.js:128 bw 3545891 3545891 3545891 
ThroughputRule.js:128 bw 3545891 3545891 3545891 
ThroughputRule.js:128 bw 124776 1835334 1151111 
ThroughputRule.js:128 bw 1959606 1876758 2435492 
ThroughputRule.js:128 bw 3213333 1765905 2979981 
2ThroughputRule.js:128 bw 1985927 2386289 2284143 
ThroughputRule.js:128 bw 1985927 2386289 2284143 

司令部解體:

1;     # prints each record 
/^[0-9]/   # if a row starts with a digit 
print substr($0,2) # prints from 2nd char onward in next line 
0

可以使用grep匹配字符串和cut去除字符:

grep "^[0-9]" file | cut -c 2- 
相關問題