ラインを選択してコマンド出力を再フォーマットするには?

ラインを選択してコマンド出力を再フォーマットするには?

1行目と4行目のみを印刷するように、次の出力形式を指定する方法はありますか?次のように、最初の行と4番目の行が同じ行に表示される場合:

sw pool test(括弧なし)status up

コマンドと出力の例:

  • 注文する:

    show server pool
    
  • 出力:

    sw pool test {
    members 1
    ip_addr 200.200.200.111
    status up
    

目的の出力形式(行1の末尾にある中括弧を削除する必要があります):

sw pool test status up

好ましくは、awkを使用してこの出力をどのように取得できますか?

ベストアンサー1

awkを使う

これにより、1行目{と4行目が印刷されます。

$ show server pool | awk 'NR==1{sub(/{/, ""); printf "%s",$0} NR==4'
sw pool test status up

どのように動作しますか?

  • NR==1{sub(/{/, ""); printf "%s",$0}

    条件はNR==1最初の行を選択します。この行の場合は、{deleteコマンドを使用してsubからを使用して行を印刷しますprintf(末尾の改行なし)。

  • NR==4

    条件はNR==44行目を選択します。この条件に指定された操作がないため、awk基本操作が実行されます。私たちが望むようにラインが印刷されます。

sedを使う

同じ機能が次のように機能しますsed

$ show server pool | sed 'h;N;N;x;N; s/{\n//'
sw pool test status up

どのように動作しますか?

  • h

    これにより、予約済みスペースに最初の行が保存されます。

  • N;N

    2号線と3号線です。

  • x

    これはホールド空間とパターン空間を交換する。これにより、ライン1がパターン空間に再配置されます。

  • N

    次に、次の行(4行目)をパターン空間に読み込み、1行目に追加します。

  • s/{\n//

    これにより、1行目の末尾で中括弧と改行文字が削除され、1行と4行が中括弧が削除された状態にマージされます。印刷された内容です。

おすすめ記事