Unixでアプリケーションログの形式を指定したいと思います。

Unixでアプリケーションログの形式を指定したいと思います。

次のログファイルがあります。

[loggerid:1234-4567] api:api1() 5.91
[loggerid:7899-45671234] api:api12345() 11.00
[loggerid:3333-45671234564] api:api12345789() 11.05

次の出力が必要です。

  • 最初の列は:との間の文字列でなければなりません。-
  • 2番目の列は:との間の文字列でなければなりません。(
  • 列3> 10の行のみが必要です。
  • すべての列の幅は固定されている必要があります。
7899 api12345    11.0 
3333 api12345789 11.05

答え1

awkすべての行が正しいパターンに従うと仮定すると、組み合わせを使用できますcolumn(2番目の行は固定幅フィールドを取得するのに役立ちます)。

$ awk -F'[-: (]' '$NF>10{print $2,$5,$NF}' log | column -t
7899  api12345     11.00
3333  api12345789  11.05

説明する

* awk -F'[-: (]': awk のフィールド区切り記号を-:または空白のいずれ(かに設定します。これにより、フィールドとして必要な部分文字列を見つけることができます。

  • $NF>10:最後のフィールド(NFフィールド数と$NF最後のフィールドの値)が10より大きい場合。
  • print $2,$5,$NF::2番目のフィールド(この場合は最初と最初の間の値)、5番目のフィールド(ここでは-2番目と最初の間の値)、および最後のフィールドを印刷します。:(

awk最後に、出力をcolumn -t固定幅テーブルにパイプします。

-行に、:または空白の組み合わせが異なる場合には、この機能は機能しません。(

関連情報