免费注册 查看新帖 |

Chinaunix

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

awk 帮忙头都大了,高手指教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-30 01:08 |只看该作者 |倒序浏览
自己弄了好久都没有弄好,请大家帮下忙awk不是很熟
如果file1里的第一个字段和file2里的第一个字段匹配,
用file2里第二个字段替换file1里的第三个字段,不匹配的也要保留
文件1 file1
10004        name4        20004
10005        name5        20005
10006        name6        20006
10007        name7        20007
10008        name8        20008
10009        name9        20009
10010        name10        20010
10011        name11        20011
10012        name12        20012
10008        name8        20008
10009        name9        20009
10010        name10        20010
10011        name11        20011
10012        name12        20012
文件2 file2
10006        20017
10007        20018
10008        20019
10009        20020
10010        20021
我自己做了一下,脑袋都大了,file1有些地方匹配成功,
file1重复地方还是没有替换掉,有些地方的字段是空的。
我的方法这样的
awk 'NR<=FNR{a[$1]=$2;b[$1]++}NR>FNR{b[$1]&&$3=a[$1];print}' file2 file1

[ 本帖最后由 liujuejun 于 2008-3-30 01:12 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-03-30 01:14 |只看该作者

  1. awk 'NR==FNR{a[$1]=$2}NR!=FNR{if(a[$1]){$3=a[$1]}print }' file2 file1
复制代码

论坛徽章:
0
3 [报告]
发表于 2008-03-30 01:24 |只看该作者
非常谢谢,达到效果
能不能解析一下,讲一下它的整个过程

论坛徽章:
0
4 [报告]
发表于 2008-03-30 01:31 |只看该作者
对比看一下
你自己写的已经完成一大半了

论坛徽章:
0
5 [报告]
发表于 2008-03-30 01:50 |只看该作者
出问题了像下面的数据就不能替换了,只替换第一个
file1
10007,name7,20007;
10008,name8,20008;
file2
10007,20017;
10008,20018;
我在里面加了
BEGIN{FS=",";RS=";";OFS=",";ORS=";"}
也不成功

论坛徽章:
0
6 [报告]
发表于 2008-03-30 01:59 |只看该作者
知道什么原因了
BEGIN{FS=",";OFS=","}
这样就可以了

论坛徽章:
0
7 [报告]
发表于 2008-03-31 11:20 |只看该作者
原帖由 liujuejun 于 2008-3-30 01:59 发表
知道什么原因了
BEGIN{FS=",";OFS=","}
这样就可以了

建议写成
BEGIN{FS="[, \t]+";OFS="[, \t]+"}
你的写法AWK只认为;是分隔符,如果遇到空格,AWK则不认为是分隔符

论坛徽章:
0
8 [报告]
发表于 2008-03-31 13:16 |只看该作者
awk '{if(NF==2){file2[$1]=$2}else{for(i in file2){if(i==$1){$3=file2}}print $0}}' file2 file1

论坛徽章:
0
9 [报告]
发表于 2008-03-31 13:18 |只看该作者
awk '{if(FNR==NR){file2[$1]=$2}else{for(i in file2){if(i==$1){$3=file2}}print $0}}' file2 file1
这样也可以
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP