如何提取文件的某些列并将其保存在新文件中

时间:2012-06-15 01:30:43

标签: bash sed awk csh

我有一个文件,其中包含以下格式的数据行:

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片段,了解如何做到这一点。

干杯

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您可以使用awk

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

基本上$(a+b)会产生a+b列中的值。