2016-05-10 3 views
0

ファイルを読み込み、その一部を変更してbashの新しいファイルに書き込もうとしています。私は、 "sed"コマンドでその部分を置き換えることができることを知っていますが、私の場合は、ファイルの先頭にある行列です。ここに私のファイルが行列のいくつかの要素を新しい値に置き換えます。bash

alpha 
1 0 0 
0 1 0 
0 0 1 
some text here 
more numbers here 

どのように見えるかであると私はbashでこれをやりたい

for i in 1 2 3 4 
do 
replace 1 0 0 
     0 1 0 
     0 0 1 
by  1*(1+${i}) ${i}/2 0 
     ${i}/2   1 0 
     0    0 1 
and print the whole file with the substitution to newfile.${i} 
done 

のようなループのために、上記行列の値を代入しようとしています。どのようにこれを行うにはどのようなアイデア?そして私はこの部分だけを変更したいだけです。

+0

マトリックスの位置とサイズを知っていますか? – Fabich

+0

@Lord of darkあなたが変更したいファイル全体またはこの部分だけを意味しますか?行列は例のように3by3であり、ファイルの3行目から5行目に始まります。これは非常に具体的で、私が使用するソフトウェアパッケージで読むためにはこの形式にする必要があります。 – Elin

答えて

0

awkはこのために、より適している:

substitute.awkスクリプトを使用して
for i in {1..4}; do awk -v i="$i" -f substitute.awk oldfile.txt > newfile.$i; done 

{ 
if(NR == 3) { print 1 + i, i/2, 0 } 
else if(NR == 4) { print i/2, 1, 0 } 
else print $0 
} 

(マトリックスはライン3〜5に常にあることを、あなたが書いたように、と仮定すると、中にあなたの例は2行目から4行目までです)

+0

お返事ありがとうございます。はい、それは常に3行目から5行目です!この例は、私が何を意味するのかを示すことでした! =) – Elin

関連する問題