免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-21 14:26 |只看该作者 |倒序浏览
有一id对应表文件id.txt,1000多行
  1. 单位一                id0001dw1
  2. 单位二                id0002dw2
  3. 单位三                id0003dw3
  4. 单位四                id0004dw4
  5. 单位五                id0005dw5
  6. 单位六                id0006dw6
  7. 单位七                id0007dw7
  8. 单位八                id0008dw8
  9. 单位九                id0009dw9
  10. 特殊单位        id000
  11. ……
  12. 单位壹千        id1000dw1000
复制代码
有一无序的日志文件my.log,千万级
  1. id0007dw7/dir/2008-01-3
  2. id0001dw1/dir/2008-02-13
  3. id0003dw3/dir/2008-03-3
  4. id0007dw7/dir/2008-03-3
  5. id0006dw6/dir/2008-05-3
  6. id0007dw7/dir/2008-06-3
  7. id0002dw2/dir/2008-08-3
  8. id0009dw9/dir/2008-10-3
  9. id0002dw2/dir/2009-01-3
  10. id0001dw1/dir/2009-11-3
  11. id0006dw6/dir/2010-01-3
  12. id000/dir/2011-01-3
  13. ……
复制代码
要求,输出文件out.txt格式为:
  1. 单位七/dir/2008-01-3
  2. 单位一/dir/2008-02-13
  3. 单位三/dir/2008-03-3
  4. 单位七/dir/2008-03-3
  5. 单位六/dir/2008-05-3
  6. 单位七/dir/2008-06-3
  7. 单位二/dir/2008-08-3
  8. 单位九/dir/2008-10-3
  9. 单位二/dir/2009-01-3
  10. 单位一/dir/2009-11-3
  11. 单位六/dir/2010-01-3
  12. 特殊单位/dir/2011-01-3
  13. ……
复制代码
我用笨办法写了一个,较复杂且效率不高,处理特殊单位还不完善。
求一个书写简单、效率高的处理脚本

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
2 [报告]
发表于 2011-03-21 14:33 |只看该作者
月经贴。

论坛徽章:
0
3 [报告]
发表于 2011-03-21 14:34 |只看该作者
要shell的

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
4 [报告]
发表于 2011-03-21 14:34 |只看该作者
看这个例子吧:

文件passwd:
s2002408030068:527:527::/home/dz02/s2002408030068:/bin/pw
s2002408032819:528:528::/home/dz02/s2002408032819:/bin/pw
s2002408032823:529:529::/home/dz02/s2002408032823:/bin/pw

文件shadow:
s20024080300681$d8NwFclG$v4ZTacfR2nsbC8BnVd3dn1:12676:0:99999:7:::
s20024080328191$UAvNbHza$481Arvk1FmixCP6ZBDWHh0:12676:0:99999:7:::
s20024080328231$U2eJ3oO1$bG.eKO8Zupe0TnyFhWX9Y.:12676:0:99999:7:::

用shadow文件中的密文部分替换passwd中的"x",生一个新passwd文件,如下所示
s20024080300681$d8NwFclG$v4ZTacfR2nsbC8BnVd3dn1:527:527::/home/dz02/s2002408030068:/bin/pw
s20024080328191$UAvNbHza$481Arvk1FmixCP6ZBDWHh0:528:528::/home/dz02/s2002408032819:/bin/pw
s20024080328231$U2eJ3oO1$bG.eKO8Zupe0TnyFhWX9Y.:529:529::/home/dz02/s2002408032823:/bin/pw

awk 'BEGIN{OFS=FS=":"} NR==FNR{a[$1]=$2}NR>FNR{$2=a[$1];print}' shadow passwd

论坛徽章:
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
5 [报告]
发表于 2011-03-21 14:38 |只看该作者
回复 1# 明月清风


    贴上你的代码啊。

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
6 [报告]
发表于 2011-03-21 14:39 |只看该作者
awk '{a[$2]=$1}NF==3{print a[$1],$2,$3}' id.txt FS="/" OFS="/" log >output

论坛徽章:
0
7 [报告]
发表于 2011-03-21 14:51 |只看该作者
awk '{a[$2]=$1}NF==3{print a[$1],$2,$3}' id.txt FS="/" OFS="/" log >output
yinyuemi 发表于 2011-03-21 14:39



    ok,多谢啦
我的awk工夫还不到家,呵呵

论坛徽章:
0
8 [报告]
发表于 2011-03-21 14:56 |只看该作者
本帖最后由 明月清风 于 2011-03-21 14:59 编辑
ok,多谢啦
我的awk工夫还不到家,呵呵
明月清风 发表于 2011-03-21 14:51



我再验证下

论坛徽章:
0
9 [报告]
发表于 2011-03-21 15:55 |只看该作者
或者:
awk 'FNR==NR{a[$2]=$1;next} {FS="/";OFS="/"; $1=a[$1]; print $0 }'  id.txt  my.log

yinyuemi (SS)  这个用 NF==3 来区分  文件,很有创意,学习了,谢谢。
awk '{a[$2]=$1}NF==3{print a[$1],$2,$3}' id.txt FS="/" OFS="/" log >output

论坛徽章:
0
10 [报告]
发表于 2011-03-21 16:27 |只看该作者
awk '{a[$2]=$1}NF==3{$1=a[$1];print}' id.txt FS="/" OFS="/" my.log
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP