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