0
2012-04-22 04:07:50,862 com.xu.validater[ajp-8009-889]: XU_USER: d888880
2012-04-22 04:07:50,863 com.xu.validater[ajp-8009-888]: XU_USER: d888881
2012-04-22 04:07:50,864 com.xu.validater[ajp-8009-887]: XU_USER: d888882
2012-04-22 04:07:50,865 com.xu.validater[ajp-8009-886]: XU_USER: d888883
...
...

すべての行から 2 つの部分を取得したい。1 つはajp-8009-889threadidのようなもので、もう1 つはd888880のようなものです。それができるものを教えてください。ありがとう。useridawk expression

のような多くの投稿をグーグル検索しましawk '{match($0, xxx; print substr($0, a[1, "start"], a[1, "length"])}' xxx.logた。しかし、私はそれを解決することはできません。私は知っています Javaを使用している場合、Matcher.group(x) がそれを行うことができます。

4

2 に答える 2

3

これは機能します:

$ awk -F"[ [\]]" '{print $4,$7}' your_file

[可能性のある区切り文字が、spaceまたはであることを示します]。次に、これらの区切り文字に基づいて文字列を分割し、フィールド番号 4 と 7 を出力します。

テスト:

$ awk -F"[ [\]]" '{print $4,$7}' your_file
ajp-8009-889 d888880
ajp-8009-888 d888881
ajp-8009-887 d888882
ajp-8009-886 d888883
于 2013-04-29T10:38:59.103 に答える
2

フィールド区切り文字をスペースと括弧に設定し、4 番目と 7 番目のフィールドを出力します。

$ awk -F' |[][]' '{print $4,$7}' file
ajp-8009-889 d888880
ajp-8009-888 d888881
ajp-8009-887 d888882
ajp-8009-886 d888883
于 2013-04-29T10:39:14.517 に答える