【发布时间】:2015-04-29 09:02:19
【问题描述】:
输入文件:
11 message1(num:1;name:"ee";job:aaffdfd);
12 message2(category:"dds";num:2;name:"Dfdsf");
输出:
11,1,ee,aaffdfd,"message1(num:1;name:"ee";job:aaffdfd)"
12,2,Dfdsf,0,"message2(category:"dds";num:2;name:"Dfds
这是我尝试过的
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
输出文件的列应如下所示:
- 第一列 - 与输入文件的第一列相同
- 第二列 - num: 和 ; 之间的数字
- 第三列 - 名称之间的字符串:" 和 ";
- job: 和 ; 之间的第四列字符串如果输入文件中不存在,则在输出中设为0
- 第五列 - 从第二列到行尾的所有内容
目前我使用不同的 awk 命令将所有字段分别提取到不同的文件中,然后使用 paste 命令合并所有文件。 是否可以使用单个 awk 命令或更优化的方式?
【问题讨论】:
-
你能展示一下你到目前为止的尝试吗?我相信这将有助于理解问题
-
我认为您不应该发布这个新问题 - 最好编辑 your previous question 以便它包含此处的详细信息,显示示例输入和 cmets 中的解释在接受的答案下方。