免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 明月清风
打印 上一主题 下一主题

求一高效脚本 [复制链接]

论坛徽章:
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
11 [报告]
发表于 2011-03-21 17:03 |只看该作者
回复 9# unixzhong


   
awk 'FNR==NR{a[$2]=$1;next} {FS="/";OFS="/"; $1=a[$1]; print $0 }'  id.txt  my.log


这样行吗?

论坛徽章:
0
12 [报告]
发表于 2011-03-21 17:11 |只看该作者
回复 11# blackold


   黑哥,我在我的shell下测试 可以得到预期结果。

在你这边不行? 能详细点吗? 谢谢

论坛徽章:
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
13 [报告]
发表于 2011-03-21 17:29 |只看该作者
回复 12# unixzhong


    什么版本的awk?

GNU Awk 3.1.6 得到错误的结果。

论坛徽章:
0
14 [报告]
发表于 2011-03-21 17:34 |只看该作者
回复 13# blackold


jzhong-desktop:/tmp/test# awk --version
GNU Awk 3.1.6
Copyright (C) 1989, 1991-2007 Free Software Foundation.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
.....
along with this program. If not, see http://www.gnu.org/licenses/.

jzhong-desktop:/tmp/test# awk 'FNR==NR{a[$2]=$1;next} {FS="/";OFS="/"; $1=a[$1]; print $0 }'  map.txt my1.log

单位一/dir/2008-02-13
单位三/dir/2008-03-3
单位七/dir/2008-03-3
单位六/dir/2008-05-3
单位七/dir/2008-06-3
单位二/dir/2008-08-3
单位九/dir/2008-10-3
单位二/dir/2009-01-3
单位一/dir/2009-11-3
单位六/dir/2010-01-3
特殊单位/dir/2011-01-3

论坛徽章:
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
15 [报告]
发表于 2011-03-21 17:37 |只看该作者
回复 14# unixzhong


   这个结果是错误的啊,误杀了第一行。

论坛徽章:
0
16 [报告]
发表于 2011-03-21 18:02 |只看该作者
回复 15# blackold


嗯, 黑哥说的是, 我测试了一下,的确,误杀第一行,想了一下,想明白自己错在哪里了。

awk 'FNR==NR{a[$2]=$1;next} {FS="/";OFS="/"; $1=a[$1]; print $0 }'  map.txt my1.log

{FS="/";OFS="/"; $1=a[$1]; print $0 } 这个进入 {代码} 里面再改的FS,OFS,估计在 后面一次进入 {代码}才生效,
这样导致   my.log首行 处理的时候, FS还是“ ”, 这样 $1 就是 id0007dw7/dir/2008-01-3   而不是 id0007dw7 了
自然匹配不到,a[id0007dw7/dir/2008-01-3]=null


谢谢 黑哥指正,要不 害死人了。 :)

论坛徽章:
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
17 [报告]
发表于 2011-03-21 18:03 |只看该作者
回复 16# unixzhong

对,是这个原因。

论坛徽章:
0
18 [报告]
发表于 2011-03-21 18:12 |只看该作者
回复 17# blackold


    谢谢黑哥指点,嘿嘿,还不下班回家呀?

   我修正了一下我的,现在测试可以了, 把 FS, OFS 移到 my.log 前面就 不会误杀第一行了。

论坛徽章:
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
19 [报告]
发表于 2011-03-21 18:14 |只看该作者
回复 18# unixzhong


    不客气,相互学习。马上就走。

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
20 [报告]
发表于 2011-03-21 18:26 |只看该作者
  1. awk 'FNR==NR{a[$2]=$1;next} {$1=a[$1]}1' id.txt FS="/" OFS="/" my.log
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP