如果模式匹配,则将整行替换为上一行的数据(无论是什么)

Nai*_*ita 0 text-processing

输入文件

Time      Value  Flag
06:15:10  49.95  Actual
00:00:00  0.00  NoValue
06:22:50  49.94  Actual
06:23:00  49.93  Actual
06:23:10  49.93  Actual
06:23:20  49.93  Actual
06:23:30  49.93  Actual
06:24:40  49.92  Actual
00:00:00  0.00  NoValue
Run Code Online (Sandbox Code Playgroud)

我必须替换与单词 匹配的整行NoValue。这意味着每当脚本找到带有 的行时NoValue,它都会用上次记录的时间替换整行。

我的结果将显示为,

Time      Value  Flag
06:15:10  49.95  Actual
06:15:10  49.95  Actual
06:22:50  49.94  Actual
06:23:00  49.93  Actual
06:23:10  49.93  Actual
06:23:20  49.93  Actual
06:23:30  49.93  Actual
06:24:40  49.92  Actual
06:24:40  49.92  Actual
Run Code Online (Sandbox Code Playgroud)

我努力了

awk 'NR%3==NoValue{ name=$0; next } { print name, $0 }' Inputfile
Run Code Online (Sandbox Code Playgroud)

但它正在合并我不想要的线条。

我的操作系统版本是 Solaris 5.8

Car*_*ual 6

awk如果条件为真,您可以打印上一行$3 == "NoValue":

awk '$3 == "NoValue" { $0=prev }{prev=$0} 1' file
Time      Value  Flag
06:15:10  49.95  Actual
06:15:10  49.95  Actual
06:22:50  49.94  Actual
06:23:00  49.93  Actual
06:23:10  49.93  Actual
06:23:20  49.93  Actual
06:23:30  49.93  Actual
06:24:40  49.92  Actual
06:24:40  49.92  Actual
Run Code Online (Sandbox Code Playgroud)

您可以看到:“如果满足条件,则打印上一行”:/sf/ask/1941865621/