パターンが一致する場合は、行全体を前の行のデータ(何でも)に置き換えます。

パターンが一致する場合は、行全体を前の行のデータ(何でも)に置き換えます。

入力ファイル

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

おすすめ記事