- 论坛徽章:
- 0
|
awk 文件合并数组并添加列的一个实际案例咨询
http://bbs.chinaunix.net/forum.p ... mp;fromuid=30395813
背景:awk 文件合并数组添加列的一个实际案例咨询:
两个文件 s10.txt 和 t11.txt,需要将两个文件进行按数组合并,以第一个文件 s10.txt 的第11个域 关联,如果是s10.txt 的第十一个域和 文件 t11.txt 第一个域相同
(即 以server1的列 进行匹配,两边相同),则 添加t11.txt 的第二个域到到 s10.txt 文件的末尾,用“:” 分割开
s10.txt:
hb1 be
server1 STARTED
t11.txt:
9080 : /ErrorPageA : HttpErrorHandler : * : localhostNode01 : server1 : cluster2 : root
9080 : /wasPerfTo : perfServletApp : * : localhostNode01 : server1 : cluster2 : root
需要的结果输出:
r1.txt:
9080 : /ErrorPageA : HttpErrorHandler : * : localhostNode01 : server1 : cluster2 : root:STARTED
9080 : /wasPerfTo : perfServletApp : * : localhostNode01 : server1 : cluster2 : root:STARTED
通过算法:awk 'NR==FNR{a[$1]=($2=="STARTED")?$2:"STOPPED"}NR!=FNR{for(i in a){if($11==i) print $0,":",a}}' s10.txt t11.txt
可以输出结果
9080 : /ErrorPageA : HttpErrorHandler : * : localhostNode01 : server1 : cluster2 : root : STARTED
9080 : : : * : localhostNode01 : server1 : cluster2 : root : START
需要解决的问题:
结果输出的结果需要改进下,如何把每个列都循环的判断下是否为空呢? 请指教?谢谢哈!
非常感谢! 再加深下算法的兼容性哈 -- 继续问下 --
如果有的列的值为空值,即为空格,如何判断并用相关的NULL 代替空格字符?
比如
原来的效果是:
9080 : /ErrorPageA : HttpErrorHandler : * : localhostNode01 : server1 : cluster2 : root : STARTED
9080 : : : * : localhostNode01 : server1 : cluster2 : root : START
需要的效果是:
9080 : /ErrorPageA : HttpErrorHandler : * : localhostNode01 : server1 : cluster2 : root : STARTED
9080 : NULL:NULL : * : localhostNode01 : server1 : cluster2 : root : STARTED
|
|