首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关键词提取

关键词提取
EN

Stack Overflow用户
提问于 2015-04-29 09:02:19
回答 2查看 57关注 0票数 0

输入文件:

代码语言:javascript
复制
11 message1(num:1;name:"ee";job:aaffdfd);
12 message2(category:"dds";num:2;name:"Dfdsf");

输出:

代码语言:javascript
复制
11,1,ee,aaffdfd,"message1(num:1;name:"ee";job:aaffdfd)"
12,2,Dfdsf,0,"message2(category:"dds";num:2;name:"Dfds

这就是我试过的

代码语言:javascript
复制
awk '{print $1}' all.txt > out1
awk '{ printf("\""); for (i = 2; i <= NF; i++) { printf("%s ", $i); } printf("\"\n") }' all.txt  > out2
awk -F'name:"|";' '{print $2}' all.txt > out3
awk -F".*job:|;|)" '/classtype:/{print $2;next}{print 0}' all.txt > out4
awk -F".*num:|;|)" '{print $2}' all.txt > out5

paste   out1 out2 out3 out4 out5 > final 

输出文件的列应以下列方式显示:

  1. 第一列--与输入文件的第一列相同
  2. 第二栏-数字之间的名词:和;
  3. 第三列-名称之间的字符串:“和";
  4. 作业之间的第四列字符串:和;如果它不存在于输入文件行中,则使其在输出中为0。
  5. 第五栏-从第二列到行尾的所有内容

目前,我使用不同的awk命令将所有字段分别提取到不同的文件中,然后使用粘贴命令合并所有文件。是否可以使用单一的awk命令或以更优化的方式进行操作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-29 09:57:10

这并不好看,但有一种方法可以使用GNU awk实现您想要的输出:

代码语言:javascript
复制
$ awk -v OFS=, '{sub(/;$/,""); print $1,
    gensub(/.*num:([0-9]+).*/,"\\1",1),
    gensub(/.*name:"([^"]+).*/,"\\1",1),
    (/job/?gensub(/.*job:([^;)]+).*/,"\\1",1):0),
    "\""$2"\""}' file
11,1,ee,aaffdfd,"message1(num:1;name:"ee";job:aaffdfd)"
12,2,Dfdsf,0,"message2(category:"dds";num:2;name:"Dfdsf")"

输出字段分隔符OFS设置为逗号。sub从每一行的末尾删除分号。gensub在这里用于提取您感兴趣的行的部分。它返回每个替换的结果。如果行上没有匹配的0,则使用三元运算符来添加/job:/。使用默认字段分隔符,$2包含第一个数字之后的所有内容。

票数 3
EN

Stack Overflow用户

发布于 2015-04-29 10:33:21

只是使用split和gsub来达到您的结果。

代码语言:javascript
复制
awk ' 
{
 sec_hash["job"]=0;
 second=$2;
 gsub(/message[0-9]*\(|\);|"/,"",second);
 split(second, sec_array, ";"); 
 for(var in sec_array) 
 {
  split(sec_array[var],key_val_array, ":");
  sec_hash[key_val_array[1]]=key_val_array[2];
 }    
 print $1 "," sec_hash["num"] "," sec_hash["name"] "," sec_hash["job"] ",\"" $2 "\"" 
}' input
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29938991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档