Math 在所有列上循环awk数学

Math 在所有列上循环awk数学,math,awk,Math,Awk,我有一个awk脚本,其中我对一个文件做了一些算术运算,并希望在文件中的所有列上循环该等式。当我将方程应用于一个单列时,它是有效的,但我尝试循环它时失败了,结果输出不正确,并且全部输入到同一列中(我希望将它们保留在各自的列中)。我的单列方程是: #!/bin/awk -f BEGIN { } { if(NR == 1) { blank = $1 } if(NR == 2) { zero = $1 }

我有一个awk脚本,其中我对一个文件做了一些算术运算,并希望在文件中的所有列上循环该等式。当我将方程应用于一个单列时,它是有效的,但我尝试循环它时失败了,结果输出不正确,并且全部输入到同一列中(我希望将它们保留在各自的列中)。我的单列方程是:

#!/bin/awk -f

BEGIN {
}
{

    if(NR == 1) {
           blank = $1
       }
    if(NR == 2) {
           zero = $1
       }
    base = zero - blank;

    if(NR > 3) {

    print (($1 - blank)/base) >> "data.txt"

    }


}
END {
}
输入:

10
20
30
40
50
10 60
20 70
30 80
40 90
50 100
输出

2
3
4
我尝试对多个列执行以下操作:

#!/bin/awk -f

BEGIN {
}
{
    for(i = 1; i <= NF; i++) {
    if(NR == 1) {
           blank = $i
       }
    if(NR == 2) {
           zero = $i
       }
    base = zero - blank;

    if(NR > 3) {

       print (($i - blank)/base) >> "data.txt"

    }
    }

}
END {
}
输出:

-2
3
-1
4
预期产出:

2 2
3 3
4 4
此外,由于尝试在所有列上循环,我不能像我所希望的那样输出结果以覆盖原始文件,因为它会添加越来越多的内容并创建一个无限循环。上面我必须输出到另一个文件,但我只想用结果覆盖原始文件

seq 10 10 100 | pr -2Ts" " | awk '
    NR == 1 {blank = $1} 
    NR == 2 {zero = $1} 
    NR >= 3 {
        for (i=1; i<=NF; i++) 
            $i = ($i - blank) / (zero - blank)
        print 
    }
'

您需要注意在那些命名奇怪的变量中需要捕获哪个字段。

如果您的测试用例输出错误,这可能就是您要查找的内容(每列的公式相同):


你的预期输出是什么?哦,我将用预期输出编辑循环输出。单列1是正确的预期输出。第一个awk程序没有生成该输出。很抱歉,我从错误的文件夹中复制粘贴了错误的测试。我试过20种不同的方法,但都弄糊涂了。现在应该是正确的。脚本、问题描述和示例输出不匹配?除了第一列(测试用例中的60和70),您是否忽略了所有列的前两行。您没有使用60和70,第二列的前两个值?嗯,我确实要求了预期的输出,所以这就是我解释问题的方式。谢谢!我的预期产出是错误的。天哪,我觉得我在这么混乱的情况下问了这个问题,但这真的很有帮助!格伦的回答也帮助我更好地理解了这一点。谢谢你们两位!我投了更高的票,但我没有足够的代表性让它可悲地显示出来:(
2 7
3 8
4 9
$ awk 'NR==1{split($0,b);next} 
       NR==2{split($0,z);next} 
            {for(i=1;i<=NF;i++) printf "%s", ($i-b[i])/(z[i]-b[i]) OFS; 
             print ""}' file
2 2
3 3
4 4