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

Bash 如何提取文件的某些列并将其保存在新文件中,bash,sed,awk,csh,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 . . . . 所有的席、

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

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
.
.
.
.
所有的席、义、子、di都是浮数。这些数字存储在第二个文件中,格式如下:

x1 y1 z1 d1
x2 y2 z2 d2
x3 y3 z3 d3
.
.
.
如果您能用csh或bash代码片段来指导如何做到这一点,我将不胜感激

干杯

你可以用它

awk '{print $1; print $2 * x, $3 / y1, z1 * $5, ...}'
本质上,
$(a+b)
将导致
a+b
第列中的值。

脚本(我称之为
matmath
):

因素:

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

除了您的
x1
y1
d1
未在此文件中定义之外,它看起来是一个非常简单的
awk
脚本。他们从哪里来?嗨,萨诺尔德。它们是浮动点编号,每行的浮动点编号不同data@regex99我们需要知道你从哪里得到这些数字。你要为每一行输入代码吗?它们是否存储在第二个文件中?它们是函数调用的结果吗?@Kevin,它来自另一个文件,该文件的数组为x1 y1 z1 d1 x2 y2 z2 d2 etchi mlt,我希望第一列数据在一行,其余数据在这之后立即在另一行。这个操作需要一行一行地完成。上面的awk one liner会这样做吗?
print
会添加一个换行符。但是我注意到每行的x,y,z不同…一个棘手的解决方法是使用awk函数在一行的基础上合并两个文件,然后应用前面提到的行,其中x,y,z只是超过主数据的列。如果你正在进行一些计算,你真的想用shell而不是像倍频程这样的东西来做吗???
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