输入文件
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
我必须替换与单词匹配的整行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
我努力了
awk 'NR%3==NoValue{ name=$0; next } { print name, $0 }' Inputfile
但它正在合并我不想要的行。
我的操作系统版本是 Solaris 5.8
awk
如果条件$3 == "NoValue"
为真,您可以打印上一行:您可以看到:“如果满足条件则打印上一行”:https ://stackoverflow.com/questions/27740937/print-previous-line-if-condition-is-met
使用流编辑器 sed,我们可以这样做:
只需两行 sed 就很容易做到这一点。我们需要做的就是在打印之前将每一行复制到保留空间中。然后,我们可以使用上一行的已保存副本来替换以 结尾的任何内容
NoValue
:这个脚本足够短,可以传入
-e
参数:结果:
NoValue
这将用最后一行替换连续的Actual
行——这似乎是对要求的合理解释,尽管这个问题没有提及。