2016-09-15 17 views
1

正規表現を指定すると、それぞれの一意の一致の最初のオカレンスをその行番号とともにbashを使用して出力します。上の任意のポインタ。一意の正規表現と行番号

は例えば、

$./script.sh file.log 
6255:2016-09-07 10:05:37,886 ERROR some text java.lang.IllegalMonitorStateException 
6714:2016-09-07 10:12:09,514 ERROR some text java.lang.NullPointerException 
7013:2016-09-07 10:19:19,950 ERROR some text java.lang.IllegalStateException 

は、私はバージョンを思い付いた、正規表現は私が印刷したい、​​であると言うことができますが、それは(のgit - bashの上):(非常に遅いですどのようにパフォーマンスを向上させるために理解される

FILE_NAME=$1 

while read line 
do 
    grep "$line" "$FILE_NAME" -m1 -n 
done < <(grep '\b[^ ]*Exception\b' "$FILE_NAME" | sort -u) | sort -n 

(サンプルデータを追加)更新:

2016-09-07 23:58:55,674 ERROR [STDERR] (pool-18-thread-1) Continuing ... 
2016-09-07 23:58:55,675 ERROR [STDERR] (pool-18-thread-1) java.lang.InstantiationException: java.sql.Timestamp 
2016-09-07 23:58:55,675 ERROR [STDERR] (pool-18-thread-1) Continuing ... 
2016-09-07 23:56:16,273 WARN [com.arjuna.ats.jta.logging.loggerI18N] (Thread-12) [com.arjuna.ats.internal.jta.recovery.xarecovery1] Local XARecoveryModule.xaRecovery got XA exception javax.transaction.xa.XAException, XAException.XAER_RMERR 
2016-09-07 23:58:55,675 ERROR [STDERR] (pool-18-thread-1) java.lang.RuntimeException: failed to evaluate: <unbound>=Class.new(); 
2016-09-07 23:58:55,675 ERROR [STDERR] (pool-18-thread-1) Continuing ... 
2016-09-07 23:58:26,304 WARN [com.arjuna.ats.jta.logging.loggerI18N] (Thread-12) [com.arjuna.ats.internal.jta.recovery.xarecovery1] Local XARecoveryModule.xaRecovery got XA exception javax.transaction.xa.XAException, XAException.XAER_RMERR 

上記生成する必要があります:

2:2016-09-07 23:58:55,675 ERROR [STDERR] (pool-18-thread-1) java.lang.InstantiationException: java.sql.Timestamp 
4:2016-09-07 23:56:16,273 WARN [com.arjuna.ats.jta.logging.loggerI18N] (Thread-12) [com.arjuna.ats.internal.jta.recovery.xarecovery1] Local XARecoveryModule.xaRecovery got XA exception javax.transaction.xa.XAException, XAException.XAER_RMERR 
5:2016-09-07 23:58:55,675 ERROR [STDERR] (pool-18-thread-1) java.lang.RuntimeException: failed to evaluate: <unbound>=Class.new(); 
+0

テスト用のファイルの 'file.log'のいくつかを投稿すれば、私は信じていますより多くの人々があなたの問題を解決しようとします。いくつかのヒットとミスがうまくいくでしょう。 –

+0

'perl'の解決策は受け入れられるでしょうか? – Sundeep

+0

'perl'はあまりにも謎めいていない限り、大丈夫です。 –

答えて

1
$ cat ip.txt 
2016-09-07 23:58:55,674 ERROR [STDERR] (pool-18-thread-1) Continuing ... 
2016-09-07 23:58:55,675 ERROR [STDERR] (pool-18-thread-1) java.lang.InstantiationException: java.sql.Timestamp 
2016-09-07 23:58:55,675 ERROR [STDERR] (pool-18-thread-1) Continuing ... 
2016-09-07 23:56:16,273 WARN [com.arjuna.ats.jta.logging.loggerI18N] (Thread-12) [com.arjuna.ats.internal.jta.recovery.xarecovery1] Local XARecoveryModule.xaRecovery got XA exception javax.transaction.xa.XAException, XAException.XAER_RMERR 
2016-09-07 23:58:55,675 ERROR [STDERR] (pool-18-thread-1) java.lang.RuntimeException: failed to evaluate: <unbound>=Class.new(); 
2016-09-07 23:58:55,675 ERROR [STDERR] (pool-18-thread-1) Continuing ... 
2016-09-07 23:58:26,304 WARN [com.arjuna.ats.jta.logging.loggerI18N] (Thread-12) [com.arjuna.ats.internal.jta.recovery.xarecovery1] Local XARecoveryModule.xaRecovery got XA exception javax.transaction.xa.XAException, XAException.XAER_RMERR 

$ perl -ne '($e)=/(\w+Exception)/; print "$.:$_" if !$seen{$e}++ && /Exception/' ip.txt 
2:2016-09-07 23:58:55,675 ERROR [STDERR] (pool-18-thread-1) java.lang.InstantiationException: java.sql.Timestamp 
4:2016-09-07 23:56:16,273 WARN [com.arjuna.ats.jta.logging.loggerI18N] (Thread-12) [com.arjuna.ats.internal.jta.recovery.xarecovery1] Local XARecoveryModule.xaRecovery got XA exception javax.transaction.xa.XAException, XAException.XAER_RMERR 
5:2016-09-07 23:58:55,675 ERROR [STDERR] (pool-18-thread-1) java.lang.RuntimeException: failed to evaluate: <unbound>=Class.new(); 
  • ($e)=/(\w+Exception)/$e変数
  • !$seen{$e}++で例外のタイプは例外に一致することを確認最初の行のみがException
  • を含む行だけを印刷する
  • && /Exception/を印刷されます保存されます
  • print "$.:$_"印刷行番号:と、入力ライン


編集:

これはあまりにも速く動作するはずです...ヌーのawkでは

perl -ne 'if(/(\w+Exception)/){print "$.:$_" if !$seen{$1}++}' ip.txt 
+0

期待どおりに動作し、パフォーマンスも向上します。 –

1

$ awk '/Exception/ && !seen[gensub(/^([^ ]*){2}/,"","g")]++ {print NR,$0}' file.log 
2 2016-09-07 23:58:55,675 ERROR [STDERR] (pool-18-thread-1) java.lang.InstantiationException: java.sql.Timestamp 
4 2016-09-07 23:56:16,273 WARN [com.arjuna.ats.jta.logging.loggerI18N] (Thread-12) [com.arjuna.ats.internal.jta.recovery.xarecovery1] Local XARecoveryModule.xaRecovery got XA exception javax.transaction.xa.XAException, XAException.XAER_RMERR 
5 2016-09-07 23:58:55,675 ERROR [STDERR] (pool-18-thread-1) java.lang.RuntimeException: failed to evaluate: <unbound>=Class.new(); 

印刷レコードif:

  • /Exception/キーは、スタートから^print NR,$0
  • 第二空間への印刷現在のレコード数とレコード
を除去することにより、作成した以前の
  • gensub(/^([^ ]*){2}/,"","g")キーを見られなかった試合
  • &&
  • !seen[...]++