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 都是浮点数。这些数字存储在具有以下格式的第二个文件中:

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第 th 列中的值。

于 2012-06-15T01:39:37.350 回答