免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-11 11:13 |只看该作者 |倒序浏览
现有file1,file2 两个文件。文件file1有2列,内容如:
no1 name1
no2 name2
no3 name2
no4 name3
no5 name4
no6 name4
no7 name4
no8 name5
no9 name6
no10 name6

文件file2 有6列,部分有空格,内容如下:
name1 data1 dada2 data3 data4 dada5
name2 dada6 data7 dada8
name3 data9 dada10 data11 dada12
name4 data13 dada14
name5 data15 dada16
name6 data17 data18
如果file1的第2列跟file2的第1列匹配,则将两条数据合并成一条,合并后的数据应该是这样的:
no1 name1 data1 dada2 data3 data4 dada5
no2 name2 dada6 data7 dada8
no3 name2 dada6 data7 dada8
no4 name3 data9 dada10 data11 dada12
no5 name4 data13 dada14
no6 name4 data13 dada14
no7 name4
no8 name5 data15 dada16
no9 name6 data17 data18
no10 name6 data17 data18
程序:
awk 'NR==FNR{a[$1]=$0}NR>FNR{print $1" "a[$2]}' file2 file1
1、请问print $1" "a[$2]这里a[$2]这是指什么意思?因为没有理解这个,我参考解决自己的问题但未遂,我的问题如下
cat a
WHBSC72,RXOTG-497
WHBSC72,RXOTG-498
WHBSC72,RXOTG-499
WHBSC72,RXOTG-500
WHBSC72,RXOTG-501
WHBSC72,RXOTG-502
WHBSC72,RXOTG-503
WHBSC72,RXOTG-504
WHBSC72,RXOTG-505
WHBSC72,RXOTG-506
WHBSC72,RXOTG-507
WHBSC72,RXOTG-508
WHBSC72,RXOTG-509
WHBSC72,RXOTG-510

cat b
WHBSC72,RXOTG-497,WH4272

result
WHBSC72,RXOTG-497,WH4272
WHBSC72,RXOTG-498
WHBSC72,RXOTG-499
WHBSC72,RXOTG-500
WHBSC72,RXOTG-501
WHBSC72,RXOTG-502
WHBSC72,RXOTG-503
WHBSC72,RXOTG-504
WHBSC72,RXOTG-505
WHBSC72,RXOTG-506
WHBSC72,RXOTG-507
WHBSC72,RXOTG-508
WHBSC72,RXOTG-509
WHBSC72,RXOTG-510

这是我模仿做的结果,但不是我想要的结果
awk ' BEGIN{OFS=FS=","}NR==FNR{ a[$1","$2]=$0}NR>FNR{print $1,$2,a[$0]}'  b a

我执行的结果

WHBSC72,RXOTG-497,WHBSC72,RXOTG-497,WH4272
WHBSC72,RXOTG-498,
WHBSC72,RXOTG-499,
WHBSC72,RXOTG-500,
WHBSC72,RXOTG-501,
WHBSC72,RXOTG-502,
WHBSC72,RXOTG-503,
WHBSC72,RXOTG-504,
WHBSC72,RXOTG-505,
WHBSC72,RXOTG-506,
WHBSC72,RXOTG-507,
WHBSC72,RXOTG-508,
WHBSC72,RXOTG-509,
WHBSC72,RXOTG-510,

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
2 [报告]
发表于 2011-05-11 11:19 |只看该作者
awk ' BEGIN{OFS=FS=","}NR==FNR{ a[$1","$2]=$3}NR>FNR{print $1,$2,a[$0]}'  b a

论坛徽章:
0
3 [报告]
发表于 2011-05-11 11:21 |只看该作者
能解释一下吗?谢谢前辈,顺便把awk 'NR==FNR{a[$1]=$0}NR>FNR{print $1" "a[$2]}' file2 file1
对比解释一下,便于理解,谢谢了!

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
4 [报告]
发表于 2011-05-11 11:31 |只看该作者
回复 3# conall


NR==FNR的时候处理文件b
a[WHBSC72,RXOTG-497]=WH4272

NR>FNR的时候处理文件a
a[$0]=a[WHBSC72,RXOTG-497]=WH4272; print WHBSC72,RXOTG-497,WH4272

论坛徽章:
0
5 [报告]
发表于 2011-05-11 11:47 |只看该作者
谢前辈,再问awk 'NR==FNR{a[$1]=$0}NR>FNR{print $1" "a[$2]}' file2 file1
print $1" "a[$2]这里a[$2]这是指什么意思?
NR==FNR的时候处理文件file2
a[name1]= name1 data1 dada2 data3 data4 dada5

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
6 [报告]
发表于 2011-05-11 11:54 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2011-05-11 12:04 |只看该作者
回复 6# zooyo


    谢谢前辈——没有匹配项则输出原行,而不会有原行+,——谢谢
WHBSC72,RXOTG-497,WHBSC72,RXOTG-497,WH4272
WHBSC72,RXOTG-498
WHBSC72,RXOTG-499
WHBSC72,RXOTG-500

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
8 [报告]
发表于 2011-05-11 12:06 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
9 [报告]
发表于 2011-05-11 12:15 |只看该作者
回复 5# conall


NR==FNR时处理file2
$1是file2的第一列
a[$1]=a[name1]=name1 data1 dada2 data3 data4 dada5

NR>FNR时处理file1
$2是file1的第二列
a[$2]=a[name1]=name1 data1 dada2 data3 data4 dada5; print no1" "name1 data1 dada2 data3 data4 dada5

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
10 [报告]
发表于 2011-05-11 12:16 |只看该作者
回复 6# zooyo


你的方法跟楼主的方法相比,在什么情况下显得“更准确”?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP