【发布时间】:2017-03-18 14:59:57
【问题描述】:
我有一个 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
输出
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 {
}
输入:
10 60
20 70
30 80
40 90
50 100
输出:
-2
3
-1
4
预期输出:
2 2
3 3
4 4
此外,在尝试遍历所有列时,我无法按照我的意愿输出结果以覆盖原始文件,因为它会添加越来越多的内容并创建无限循环。上面我必须输出到不同的文件,但我想用结果覆盖原始文件。
【问题讨论】:
-
你的预期输出是什么?
-
哦,我会用预期的输出编辑循环的。单数第一列是正确的预期输出。
-
第一个 awk 程序不会产生那个输出。
-
对不起,我从错误的文件夹中复制粘贴了我对其进行的错误测试。已经尝试了 20 种不同的方法,结果感到困惑。现在应该是正确的。
-
脚本、问题描述和示例输出不匹配?您是否忽略了除第一列之外的所有列的前两行(测试用例中的 60 和 70)。