複数行を1行に変換

複数行を1行に変換

次の4行があります。

EXTRACT    ETEST  Last Started 2016-03-20 20:56   Status RUNNING  
Checkpoint Lag       00:00:02 (updated 00:00:04 ago)
EXTRACT    PTEST  Initialized   2016-03-31 06:25   Status STOPPED 
Checkpoint Lag       00:00:00 (updated 02:21:09 ago)

私はそれらを次のように2行に分けたいと思います。

EXTRACT    ETEST  Last Started 2016-03-20 20:56   Status RUNNING Checkpoint Lag       00:00:02 (updated 00:00:04 ago)
EXTRACT    PTEST  Initialized  2016-03-31 06:25   Status STOPPED Checkpoint Lag       00:00:00 (updated 02:21:09 ago)

私はそれを作ることができますcat /tmp/glog.lst|xargs -n 14

EXTRACT    ETEST  Last Started 2016-03-20 20:56   Status RUNNING Checkpoint Lag       00:00:02 (updated 00:00:04 ago)
EXTRACT    PTEST  Initialized  2016-03-31 06:25   Status STOPPED Checkpoint Lag       00:00:00 (updated 02:21:09 ago)

ただし、row1には14個のフィールドがあり、row2には13個のフィールドがあります。

問題は、row2が「Last Start」に初期化されたことです。

14個未満の列から14個の列で行を作成し、「N」(または)何かでダミー列をインストールして14個の列を持たせてスクリプトで簡単に処理できるようにしたいと思います。

私もやっぱりやりたい

EXTRACT    ETEST  Last Started  2016-03-20 20:56   Status RUNNING Checkpoint Lag       00:00:02 (updated 00:00:04 ago)
EXTRACT    PTEST  Initialized N 2016-03-31 06:25   Status STOPPED Checkpoint Lag       00:00:00 (updated 02:21:09 ago)

これは私が必要です。

$ awk '{ if (FNR%2==1) tmp=$0; else print tmp,$0 }'  /tmp/gglog.lst
EXTRACT    ETEST1  Initialized 2016-03-20 20:56   Status STOPPED Checkpoint Lag       00:00:02 (updated 00:00:09 ago)
EXTRACT    ETEST2  Last Started 2016-03-20 20:56   Status RUNNING Checkpoint Lag       00:00:02 (updated 00:00:04 ago)
EXTRACT    ETEST3  Last Started 2016-03-20 20:56   Status RUNNING Checkpoint Lag       00:00:02 (updated 00:00:09 ago)
EXTRACT    PTEST1  Last Started 2016-03-29 08:46   Status RUNNING Checkpoint Lag       00:00:00 (updated 00:00:02 ago)
EXTRACT    PTEST0  Last Started 2016-03-29 08:46   Status RUNNING Checkpoint Lag       00:00:00 (updated 00:00:05 ago)

それでは、初期化/最後/開始列の値を取り出し、次のように見せたいと思います。

EXTRACT    ETEST1  2016-03-20 20:56   Status STOPPED Checkpoint Lag       00:00:02 (updated 00:00:09 ago)
EXTRACT    ETEST2  2016-03-20 20:56   Status RUNNING Checkpoint Lag       00:00:02 (updated 00:00:04 ago)
EXTRACT    ETEST3  2016-03-20 20:56   Status RUNNING Checkpoint Lag       00:00:02 (updated 00:00:09 ago)
EXTRACT    PTEST1  2016-03-29 08:46   Status RUNNING Checkpoint Lag       00:00:00 (updated 00:00:02 ago)
EXTRACT    PTEST0  2016-03-29 08:46   Status RUNNING Checkpoint Lag       00:00:00 (updated 00:00:05 ago)

それとも、「初期化」を中断して「すぐに初期化」できますか?アーカイブした行が初期化されていても、これを「今の初期化」に分類したいと思います。

EXTRACT    ETEST1  Init Now 2016-03-20 20:56   Status STOPPED Checkpoint Lag       00:00:02 (updated 00:00:09 ago)
EXTRACT    ETEST2  Last Started 2016-03-20 20:56   Status RUNNING Checkpoint Lag       00:00:02 (updated 00:00:04 ago)
EXTRACT    ETEST3  Last Started 2016-03-20 20:56   Status RUNNING Checkpoint Lag       00:00:02 (updated 00:00:09 ago)
EXTRACT    PTEST1  Last Started 2016-03-29 08:46   Status RUNNING Checkpoint Lag       00:00:00 (updated 00:00:02 ago)
EXTRACT    PTEST0  Last Started 2016-03-29 08:46   Status RUNNING Checkpoint Lag       00:00:00 (updated 00:00:05 ago)

ベストアンサー1

  • 2つずつマージするには:

    awk '{ if(FNR%2==1) tmp=$0; else print tmp,$0 }' tmp/glog.lst

  • Initialized次に置き換えるInit Now

    sed 's/Initialized/Init Now/' tmp/glog.lst

  • 両方の操作を同時に実行するには、パイプを使用して接続します。

    awk '{ if(FNR%2==1) tmp=$0; else print tmp,$0 }' tmp/glog.lst | sed 's/Initialized/Init Now/'

おすすめ記事