2016-09-08 11 views
0

特定の値を抽出する必要がある大きなファイルがあります。私はその中に "Brontes"という言葉をつけた文字列を探しています。AWK/SEDを介して文字列から特定の番号を出力

awk '/Brontes/{print $18}' file 

、結果は正しいです::

を275637msしかし、文字列は少し違って見えるとき(カラムの量が変更された)結果をします、私はそのようにこれを印刷しようとしていた

2016-09-05 11:23:08,022 ERROR [xxx.xxx.xx] (MSC service thread 1-6) XXXX015875: XXXX AS 7.1.1.Final "Brontes" started (with errors) in 275637ms - Started 1221 of 1307 services (3 services failed or missing dependencies, 71 services are passive or on-demand) 

同じではありません。

同じ結果を達成する方法はありますが、列の量に依存しない方法はありますか?

+3

に文字列Brontesを含む行からmsで終わるすべての数字を出力します。 1つのサンプルだけでは、このログがどのようにして – fedorqui

+0

を書き込むのかを知ることができません。また、あなたの番号が常に 'ms'で終わっていれば、それを使うことができます...' grep -oP '\ d + ms' file' – Sundeep

+0

はい、これは常にmsで終わりますが、このgrepはすべての値をmsで返します。その中に "Brontes"という単語を含む文字列だけが必要です。 – klapsak

答えて

1

サンプル入力:AWKを用い

echo $ola 
2016-09-05 11:23:08,022 ERROR [xxx.xxx.xx] (MSC service thread 1-6) XXXX015875: XXXX AS 7.1.1.Final Brontes started (with errors) in 275637ms - Started 1221 of 1307 services (3 services failed or missing dependencies, 71 services are passive or on-demand) 

が溶液:各列を通してスキャンし、その中に、MSを含む列を印刷します。

echo $ola |awk '/Brontes/{for(i=1;i<=NF;i++) if($i ~ /[0-9]+ms/) print $i}' 
275637ms 
+0

素晴らしい!それは優れた作品です。ありがとうございます@soFan – klapsak

1
grep -oP 'Brontes.* \K\d+ms' file 

これは、我々は[MCVE]を得るためにあなたを必要とし、このための従来その数

関連する問題