Chinaunix

标题: 文本列的位置不固定,需要提取部分列 [打印本页]

作者: jianpan168    时间: 2016-08-03 17:12
标题: 文本列的位置不固定,需要提取部分列
比如:日志中出现如下内容,但model_num、build_num等,列的位置不固定,需要提取这两个列,有什么办法?

model_num[H30-T00],base_ver[MOLY.WR8.W1319.MD.TG.MP.V8.P75, 2014/06/06 06:56],build_num[hwH30-T00],channel[],sdk_ver[2.0.5]
需要的结果:
model_num[H30-T00] build_num[hwH30-T00]
作者: sunzhiguolu    时间: 2016-08-03 17:17
model_num, build_num 列的相对顺序固定吗?
作者: moperyblue    时间: 2016-08-03 17:32
本帖最后由 moperyblue 于 2016-08-03 18:07 编辑
  1. grep -oP '(model_num|build_num)[^,]*'|xargs
  2. sed -r 's#(model_num|build_num)[^,]*#<&>#g;s/>.*</ /;s/.*<|>.*//g'
复制代码

作者: jason680    时间: 2016-08-03 17:46
本帖最后由 jason680 于 2016-08-03 17:50 编辑

回复 1# jianpan168

which one do you like

$ awk 'function get(x){if(match($0,"("x"\\[([^\\]]*)\\])",a))return(a[2])}{print get("model_num"),get("build_num")}' FILE
H30-T00 hwH30-T00

$ awk 'function get(x){if(match($0,"("x"\\[([^\\]]*)\\])",a))return(a[1])}{print get("model_num"),get("build_num")}' FILE
model_num[H30-T00] build_num[hwH30-T00]



$ awk 'function get(x){if(match($0,"("x"\\[([^\\]]*)\\])",a))return(a[2])}{print get("base_ver"),get("sdk_ver")}' FILE
MOLY.WR8.W1319.MD.TG.MP.V8.P75, 2014/06/06 06:56 2.0.5

$ awk 'function get(x){if(match($0,"("x"\\[([^\\]]*)\\])",a))return(a[1])}{print get("base_ver"),get("sdk_ver")}' FILE
base_ver[MOLY.WR8.W1319.MD.TG.MP.V8.P75, 2014/06/06 06:56] sdk_ver[2.0.5]

   
作者: sunzhiguolu    时间: 2016-08-03 17:48
本帖最后由 sunzhiguolu 于 2016-08-03 17:49 编辑
  1. perl -nle '$,="\t";print /((?:model|build).+?),/g' f
复制代码
model_num[H30-T00]      build_num[hwH30-T00]

作者: jianpan168    时间: 2016-08-03 17:52
本帖最后由 jianpan168 于 2016-08-03 17:54 编辑

多谢大家,我试试。
作者: sunzhiguolu    时间: 2016-08-03 17:58
本帖最后由 sunzhiguolu 于 2016-08-03 18:01 编辑
jason680 发表于 2016-08-03 17:46
回复 1# jianpan168

which one do you like

找错位置了, 谢谢您老人家!!!
  1. perl -nle '$,="\t";print /(?:model|build).+?\]/g' f
复制代码

作者: jcdiy0601    时间: 2016-08-04 09:31
  1. awk -F, '{for(i=1;i<=NF;i++)if($i~/model_num|build_num/)printf $i" "}{print ""}' file
复制代码

作者: hz_oracle    时间: 2016-08-04 09:59
awk -F, '{for(i=1;i<=NF;i++)if($i ~/model_num/||$i ~/build_num/)printf $i" ";printf "\n"}' file
作者: jianpan168    时间: 2016-08-04 10:53
非常感谢!!  学习了。
作者: 少林功夫好    时间: 2016-08-05 09:41
已经是完全看不懂了。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2