2013-10-22 13 views
0

我是一名生物學家,但對linux系統知之甚少。編輯一系列文件並從var列表中替換變量

我有每個目錄中的文本文件xyz.txt N否的目錄(dir1,dir2 .. dirN)。我想用"probability = some variable"行編輯每個文件。 「一些變量」應該由變量列表中的相應值替換,變量來自variable.txt。

variable.txt看起來像以下:

1 23 
2 54 
3 89 
4 102 
. 
. 
. 
N 1000 

誰能幫我寫一個bash腳本。

回答

0

你可以使用這個腳本:你描述

# read variable.txt in an array 
arr=("") 
while read k v; do arr+=($v); done < variable.txt 

# now start replacing xyz.txt in each subdir 
i=1; 
while read file; do 
    repl=${arr[$i]} 
    sed -i.bak "s/\(probability = \)some variable/\1$repl/" "$file" 
    i=((i++)) 
done < <(find /some/path -name "xyz.txt") 
+0

最後一行中的雙「'」是故意的嗎? –

+0

對於過程輸出間接來說是非常有意的。 – anubhava

+0

老實說,如果你想讓OP從答案中學習,我會更容易一些。這是高層次的! – fedorqui

0

假設名稱是預先知道的和後綴,你可以試試下面的腳本

while read number prob ; 
do 
    sed -i.bak "s/probability = .*$/probability = $prob/" dir$number/xyz.txt 
done < variable.txt 

演示:

$ cat t.sh 
#!/bin/bash 

while read number prob ; 
do 
    sed -i.bak "s/probability = .*$/probability = $prob/" dir$number/xyz.txt 
done < variable.txt 
$ for i in {1..4} ; do cat -n dir$i/xyz.txt; done 
    1 tata 
    2 probability = some value 
    1 tata 
    2 probability = some value 
    1 tata 
    2 probability = some value 
    1 tata 
    2 probability = some value 
$ cat variable.txt 
1 23 
2 54 
3 89 
4 102 
$ ./t.sh 
$ for i in {1..4} ; do cat -n dir$i/xyz.txt; done 
    1 tata 
    2 probability = 23 
    1 tata 
    2 probability = 54 
    1 tata 
    2 probability = 89 
    1 tata 
    2 probability = 102 
+0

精湛的........偉大的猴子工作一行腳本非常感謝 – user164954

+0

如果它適合您的需求,隨時upvote和/或接受這個答案。乾杯。 – damienfrancois