免费注册 查看新帖 |

Chinaunix

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

awk的ARGIND问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-28 13:40 |只看该作者 |倒序浏览
昨天在论坛看到一个帖子,问题是这样的:
file1.txt

baidu   46    name1      爸爸            1001      0
baidu   46    name2      诛神丨丶灬浪子  1003      100001
baidu   46    name3      诛神丨丶灬东方  1004      100003
baidu   46    name4      杜尔            1001      100009
baidu   46    name5      苗邪刀          1003      0
baidu   46    name6     丿莫入灬红尘     1003      100008
baidu   46    name7     丿神灬话         1001      0
baidu   46    name8     无聊             1005      100008  
baidu   46    name9     葛志墨           1003      100001
baidu   46    name10    Love平          1001      0

file2.txt

100001  大1
100002  大2
100003  大3
100004  大4
100005  大5
100006  大6
100007  大7
100008  大8
100009  大9
100010  大10

file3.txt

1001   小1
1002   小2
1003   小3
1004   小4
1005   小5
1006   小6
1007   小7
1008   小8
1009   小9
10010  小10

处理后的结果如下:

baidu   46      name1   爸爸                       小1
baidu   46      name2   诛神丨丶灬浪子     小3      大1
baidu   46      name3   诛神丨丶灬东方     小4      大3
baidu   46      name4   杜尔                    小1      大9
baidu   46      name5   苗邪刀                  小3
baidu   46      name6   丿莫入灬红尘       小3     大8
baidu   46      name7   丿神灬话           小1
baidu   46      name8   无聊                    小5     大8
baidu   46      name9   葛志墨                  小3     大1
baidu   46      name10  Love平          小1

我用以下方法试了一下,给出的答案不一样,抓狂中...
[root@centos test]# awk '{if(ARGIND==3){a[$1]=$2} else if(ARGIND==2){b[$1]=$2} else{$5=a[$5];$6=b[$6];print}}' file1.txt file2.txt file3.txt
baidu 46 name1 爸爸
baidu 46 name2 诛神丨丶灬浪子
baidu 46 name3 诛神丨丶灬东方
baidu 46 name4 杜尔
baidu 46 name5 苗邪刀
baidu 46 name6 丿莫入灬红尘
baidu 46 name7 丿神灬话
baidu 46 name8 无聊
baidu 46 name9 葛志墨
baidu 46 name10 Love平

[root@centos test]# awk '{if(ARGIND==1){a[$1]=$2} else if(ARGIND==2){b[$1]=$2} else{$5=a[$5];$6=b[$6];print}}' file3.txt file2.txt file1.txt
baidu 46 name1 爸爸 小1
baidu 46 name2 诛神丨丶灬浪子 小3 大1
baidu 46 name3 诛神丨丶灬东方 小4 大3
baidu 46 name4 杜尔 小1 大9
baidu 46 name5 苗邪刀 小3
baidu 46 name6 丿莫入灬红尘 小3 大8
baidu 46 name7 丿神灬话 小1
baidu 46 name8 无聊 小5 大8
baidu 46 name9 葛志墨 小3 大1
baidu 46 name10 Love平 小1

为什么两种写法结果不一样呢,逻辑上是一样的啊,我感觉...

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
2 [报告]
发表于 2011-10-28 13:44 |只看该作者
一般的顺序是先盛饭再吃饭

论坛徽章:
0
3 [报告]
发表于 2011-10-28 13:45 |只看该作者
顶2楼

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

论坛徽章:
1
摩羯座
日期:2014-12-29 15:59:36
5 [报告]
发表于 2011-10-28 13:48 |只看该作者
笑洗我了

论坛徽章:
0
6 [报告]
发表于 2011-10-28 14:47 |只看该作者
回复 2# waker


    被鄙视了... 我后面的文件顺序也换了啊,大仙们...

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
7 [报告]
发表于 2011-10-28 15:00 |只看该作者
回复 6# yuanfaxiang1008


    file1被处理的时候其它两个文件都没读入呢,程序只好给你打印空值了

论坛徽章:
1
摩羯座
日期:2014-12-29 15:59:36
8 [报告]
发表于 2011-10-28 15:07 |只看该作者
楼主差点把我忽悠了,面壁去

论坛徽章:
0
9 [报告]
发表于 2011-10-28 15:08 |只看该作者
回复  waker


    被鄙视了... 我后面的文件顺序也换了啊,大仙们...
yuanfaxiang1008 发表于 2011-10-28 14:47



    一般的顺序是先脱鞋再脱袜子

论坛徽章:
0
10 [报告]
发表于 2011-10-28 15:48 |只看该作者
回复 8# ziyunfei


    大仙儿们,我面壁回来了,认识到错了,awk扫描顺序理解不到位,定向思维它是全部扫描完了再开始执行的,谢谢大仙儿们
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP