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)可以做到。
答案 0 :(得分: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
答案 1 :(得分:2)
将字段分隔符设置为空格和括号,并打印第四个和第七个字段:
$ awk -F' |[][]' '{print $4,$7}' file
ajp-8009-889 d888880
ajp-8009-888 d888881
ajp-8009-887 d888882
ajp-8009-886 d888883