入力ファイル
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です。
ベストアンサー1
条件がtrueの場合、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
「条件が満たされたら、前の行を印刷します」が表示されます。https://stackoverflow.com/questions/27740937/print-previous-line-if-condition-is-met