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"