再问关于合并文件的问题
时间:2011-05-11
来源:互联网
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,
作者: conall 发布时间: 2011-05-11
作者: Shell_HAT 发布时间: 2011-05-11
对比解释一下,便于理解,谢谢了!
作者: conall 发布时间: 2011-05-11
NR==FNR的时候处理文件b
a[WHBSC72,RXOTG-497]=WH4272
NR>FNR的时候处理文件a
a[$0]=a[WHBSC72,RXOTG-497]=WH4272; print WHBSC72,RXOTG-497,WH4272
作者: Shell_HAT 发布时间: 2011-05-11
print $1" "a[$2]这里a[$2]这是指什么意思?
NR==FNR的时候处理文件file2
a[name1]= name1 data1 dada2 data3 data4 dada5
作者: conall 发布时间: 2011-05-11
- awk 'BEGIN{OFS=FS=SUBSEP=","}NR==FNR{a[$1,$2]=$0;next}{print a[$0]?a[$0]:$0}' b a
作者: zooyo 发布时间: 2011-05-11
谢谢前辈——没有匹配项则输出原行,而不会有原行+,——谢谢
WHBSC72,RXOTG-497,WHBSC72,RXOTG-497,WH4272
WHBSC72,RXOTG-498
WHBSC72,RXOTG-499
WHBSC72,RXOTG-500
作者: conall 发布时间: 2011-05-11
我哪什么前辈,你折杀我了,我标准一菜鸟,才学的。我修了一下命令,这样更简单有效。
作者: zooyo 发布时间: 2011-05-11
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
作者: Shell_HAT 发布时间: 2011-05-11
你的方法跟楼主的方法相比,在什么情况下显得“更准确”?
作者: Shell_HAT 发布时间: 2011-05-11
没发生匹配的行,后面多了个逗号而已。
作者: zooyo 发布时间: 2011-05-11
作者: conall 发布时间: 2011-05-11
作者: conall 发布时间: 2011-05-11
版主解释的很详细
作者: zhaoke0128 发布时间: 2011-05-11
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28