一致後に次の行だけを印刷するには、awk を使用します。

一致後に次の行だけを印刷するには、awk を使用します。

grep、、などの他のツールを使用して複数のawkパイプを一致させた後に直接行を印刷するコマンドがありますtail。これはうまくいきますが、少し汚れていて、これを行うためにいくつかのパイプを使用しています。これらのツールの1つを使用して、1つのコマンドでこれを実行できますか?ファイルの末尾に空白行もあります。

文書の内容:

10:28:48  2022-09-15T15:28:36Z:    Creating tar ball for build artifacts
--
10:28:53  --> Build complete: Artifacts were created:
file: build-1.tar.gz

注文する

grep -A1 "Artifacts were created:" $file | tail -n1 | awk '{print $2}'

結果

build-1.tar.gz

これは技術的には可能ですが、やや混乱しているようです。

ベストアンサー1

試してみてください:

awk '/Artifacts were created:/{p=1} NF{out=$2}  END{if(p==1){print out}}' infile

指定したパイプラインは、最後のフィールドではなく一致後の行の2番目のフィールドを抽出しています。これはawkへの単一の呼び出しに変換されます。

awk '
      # Have we found the match?
      /Artifacts were created:/{ found=1 ; next }
      
      # if a match has been found, print and exit
      found == 1 { print $2; exit }

    ' "$file"

おすすめ記事