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
...
...

我想从每一行中得到两个部分。一个threadid类似于ajp-8009-889,另一个userid类似于d888880。你能给我一个awk 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

将字段分隔符设置为空格和括号并打印第四个和第七个字段:

$ 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 回答