假设您的一个数据文件返回您所有的读数。清除所有杂乱后;你得到的总是 3 列:
-ERROR -1.57 -2.02
-2.10 -0.57 ERROR
-4.70 ERROR -0.52
-2.20 ERROR -0.02
-2.20 -0.07 ERROR
Run Code Online (Sandbox Code Playgroud)
我知道ERROR这是唯一的错误消息,并且对于任何数据都是随机发生的,因此,它是唯一不是数字的值。
挑战
如何用最后一次成功的读数替换任何无效的读数?我试过了
awk -F' ' ' {if (isNumber $1){ replace with previous $1}}' < log.data
Run Code Online (Sandbox Code Playgroud)
但是您首先如何参考之前的阅读内容呢?
预期输出:
0 -1.57 -2.02
-2.10 -0.57 -2.02
-4.70 -0.57 -0.52
-2.20 -0.57 -0.02
-2.20 -0.07 -0.02
Run Code Online (Sandbox Code Playgroud)
假设:
ERROR一个awk想法:
awk '
{ for (i=1;i<=NF;i++) { # loop through fields
if ($i ~ "ERROR") # if problematic value found then ...
$i=last[i]+0 # replace with the last value seen; "+0" to force undefined to be zero (and not "")
last[i]=$i # save current field as "last" for the next input line
}
print $0 # print current line
}
' log.data
Run Code Online (Sandbox Code Playgroud)
这会生成:
0 -1.57 -2.02
-2.10 -0.57 -2.02
-4.70 -0.57 -0.52
-2.20 -0.57 -0.02
-2.20 -0.07 -0.02
Run Code Online (Sandbox Code Playgroud)