2

次の形式のデータ行を含むファイルがあります。

a11 a12 a13 a14 a15
a21 a22 a23 a24 a25 
a31 a32 a33 a34 a35 
a41 a42 a43 a44 a45 
.
.
.

私が必要とするのは、このデータに対していくつかの演算を実行した後、次の形式で新しいファイルにこのデータを保存することです。

a11 
a12*x1 a13/y1 z1*a15+d1
a21 
a22*x2 a23/y2 z2*a25+d2
a31 
a32*x3 a33/y3 z3*a35+d3
.
.
.
.

xi、yi、zi、di はすべて浮動小数点数です。これらの数値は、次の形式の 2 番目のファイルに保存されます。

x1 y1 z1 d1
x2 y2 z2 d2
x3 y3 z3 d3
.
.
.

これを行う方法について、csh または bash のスニペットを使用してガイドしていただければ幸いです。

乾杯

4

2 に答える 2

2

スクリプト(私はそれを呼び出しますmatmath):

#!/usr/bin/awk -f
BEGIN {
    factors = ARGV[1]
    ARGC--
}
{
    print $1
    getline line < factors
    split(line, f)
    print $2 * f[1], $3 / f[2], f[3] * $5 + f[4]
}

データ ファイル:

マトリックス:

11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
41 42 43 44 45

要因:

1.1 1.2 1.3 1.4 1.5
2.1 2.2 2.3 2.4 2.5
3.1 3.2 3.3 3.4 3.5
4.1 4.2 4.3 4.4 4.5

実行例:

$ chmod u+x matmath    # run once to set the script to be executable
$ ./matmath factors matrix
1.1
1.32 1.08333 3.35
2.1
4.62 1.04545 8.15
3.1
9.92 1.03125 14.95
4.1
17.22 1.02381 23.75
于 2012-06-15T02:29:51.173 に答える
1

そのためにawkを使用できます。

awk '{print $1; print $2 * x, $3 / y1, z1 * $5, ...}'

基本的$(a+b)に、列の値になりa+bます。

于 2012-06-15T01:39:37.350 に答える