次のログファイルがあります。
[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
固定幅テーブルにパイプします。
-
行に、:
または空白の組み合わせが異なる場合には、この機能は機能しません。(