gpt4 book ai didi

bash - 使用 awk (GNU) 命令回溯

转载 作者:行者123 更新时间:2023-12-05 09:02:37 24 4
gpt4 key购买 nike

假设您的一个数据文件返回给您所有的读数。清除所有杂乱后;你总是得到 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

我知道 ERROR唯一的错误消息,它随机发生在任何数据上,因此是唯一不是数字的值。

挑战

如何用最后一次成功的阅读替换任何无效的阅读?我试过了

awk -F' ' ' {if (isNumber $1){ replace with previous $1}}' < log.data

但是您如何引用之前的阅读 Material ?

预期输出:

 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

最佳答案

假设:

  • 所有行都有相同数量的空格分隔字段/列
  • 所有非数字值都包含文字字符串ERROR
  • 如果第一行包含非数字值,则替换值将为零 (0)

一个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

这会产生:

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

关于bash - 使用 awk (GNU) 命令回溯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71163041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com