免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2922 | 回复: 8
打印 上一主题 下一主题

关于两个文件合并的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-01 11:58 |只看该作者 |倒序浏览
有两个文件
文件a:
RNC;Date/Time ;RACK;Object ;pmCapacityAllocRej ;pmSamplesCapacity ;pmSumCapacity
WHRNC01;2011-03-01 03:15;ES-1;Licensing=1,RncCapacity=IubThroughput; 0; 900; 31558430

文件b:
RNC;RACK;VALUE
WHRNC01;250000;ES-1
WHRNC01;400000;ES-2
WHRNC01;250000;ES-3

1、希望文件a、文件b按照关键字段即WHRNC01、ES-1进行匹配将文件b中对应的VALUE值取到文件a而生成文件c
RNC;Date/Time ;RACK;Object ;VALUE;pmCapacityAllocRej ;pmSamplesCapacity ;pmSumCapacity
WHRNC01;2011-03-01 03:15;ES-1;Licensing=1,RncCapacity=IubThroughput; 250000;0; 900; 31558430

2、希望文件a中的Date/Time对应列均加8小时
即2011-03-01 03:15变成2011-03-01 11:15
这在EXCEL中用公式很好做2011-03-01 03:15+1/3即可,但在UNIX中要考虑闰月什么的

论坛徽章:
0
2 [报告]
发表于 2011-03-01 13:03 |只看该作者
我原来是这样处理的:
文件a删除第1行标题行,然后合并关键匹配项变为a1:
WHRNC01ES-1;2011-03-01 03:15;Licensing=1,RncCapacity=IubThroughput; 0; 900; 31558430

文件b删除第1行标题行,然后合并关键匹配项变为b1:
WHRNC01ES-1;250000;
WHRNC01ES-2;400000;
WHRNC01ES-3;250000;   

然后应用                                
awk -F";" 'NR==FNR{a[$1]=$2}NR>FNR{print $0";"a[$1]}'   b1.txt a1.txt      

生成文件c1,最后再处理一下即可
WHRNC01ES-1;2011-03-01 03:15;Licensing=1,RncCapacity=IubThroughput; 0; 900; 31558430;250000               
但是,1、这样处理很麻烦 2、实际我也是依葫芦画瓢参照网上的awk -F";" 'NR==FNR{a[$1]=$2}NR>FNR{print $0";"a[$1]}'   b1.txt a1.txt
如此这样处理,但尚未完全理解其意义

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
3 [报告]
发表于 2011-03-01 13:28 |只看该作者
用awk就可以了。字段的对应关系是不是搞错了?

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
4 [报告]
发表于 2011-03-01 14:11 |只看该作者
本帖最后由 blackold 于 2011-03-01 18:07 编辑

回复 1# camelly


    根据你给出的数据,写了一个,你试试
  1. awk 'BEGIN{OFS=FS=";"}NR==FNR{if(NR==1)a[$1,$2]=$3;else a[$1,$3]=$2;next}FNR>1{cmd="date -d \""$2" UTC\" \"+%Y-%m-%d %H:%M\"";cmd|getline $2;close(cmd)}{$4=$4";"a[$1,$3]}1' b a
复制代码
自己简化。

论坛徽章:
0
5 [报告]
发表于 2011-03-01 14:27 |只看该作者
不效啊!运行结果为RNC;Date/Time ;RACK;Object ;pmCapacityAllocRej ;pmSamplesCapacity ;pmSumCapacity
WHRNC01;2011-03-01 11:15;ES-1;Licensing=1,RncCapacity=IubThroughput;; 0; 900; 31558430


应该为
RNC;Date/Time ;RACK;Object ;pmCapacityAllocRej ;pmSamplesCapacity ;pmSumCapacity
WHRNC01;2011-03-01 11:15;ES-1;Licensing=1,RncCapacity=IubThroughput;250000 ; 0; 900; 31558430

但此处为空格

论坛徽章:
0
6 [报告]
发表于 2011-03-01 14:32 |只看该作者
awk 配合gnu date应该能搞定

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
7 [报告]
发表于 2011-03-01 14:33 |只看该作者
本帖最后由 blackold 于 2011-03-01 18:08 编辑

回复 5# camelly

"不效"?? 拜托,要注意措辞。
我的测试:
$ head a b
==> a <==
RNC;Date/Time ;RACK;Object ;pmCapacityAllocRej ;pmSamplesCapacity ;pmSumCapacity
WHRNC01;2011-03-01 03:15;ES-1;Licensing=1,RncCapacity=IubThroughput; 0; 900; 31558430

==> b <==
RNC;RACK;VALUE
WHRNC01;250000;ES-1
WHRNC01;400000;ES-2
WHRNC01;250000;ES-3

$ awk 'BEGIN{OFS=FS=";"}NR==FNR{if(NR==1)a[$1,$2]=$3;else a[$1,$3]=$2;next}FNR>1{cmd="date -d \""$2" UTC\" \"+%Y-%m-%d %H:%
M\"";cmd|getline $2;close(cmd)}{$4=$4";"a[$1,$3]}1' b a
RNC;Date/Time ;RACK;Object ;VALUE;pmCapacityAllocRej ;pmSamplesCapacity ;pmSumCapacity
WHRNC01;2011-03-01 11:15;ES-1;Licensing=1,RncCapacity=IubThroughput;250000; 0; 900; 31558430


我上面说了,可能你把字段的对应关系搞错了(没见你回复)。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
8 [报告]
发表于 2011-03-01 14:35 |只看该作者
head a b输出什么?贴上来看看。

论坛徽章:
0
9 [报告]
发表于 2011-03-01 15:00 |只看该作者
1、请blackold (黑哥) 见谅,早闻大佬名声。"不效"——最近喜好中医,中医常说不效意为无效或者效果不佳。请黑哥谅解。
2、果真是我搞错次序,另外,我的shell不支持awk只支持nawk所有折腾了一会才行的。谢谢黑哥!
[~/WHRNC/test]$ cat a.log
RNC;Date/Time ;RACK;Object ;pmCapacityAllocRej ;pmSamplesCapacity ;pmSumCapacity
WHRNC01;2011-03-01 03:15;ES-1;Licensing=1,RncCapacity=IubThroughput; 0; 900; 31558430

[~/WHRNC/test]$ cat b.txt
RNC;RACK;VALUE
WHRNC01;ES-1;250000
WHRNC01;ES-2;400000
WHRNC01;ES-3;250000
3、谢谢黑哥的帮助,惭愧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP