免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: zooyo
打印 上一主题 下一主题

[游戏娱乐] 2012年ChinaUnix社区Shell编程大赛 [结束评审 公布部分答案](获奖名单已公布-5-24) [复制链接]

论坛徽章:
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
11 [报告]
发表于 2012-03-07 13:58 |只看该作者
本帖最后由 expert1 于 2012-03-08 16:25 编辑

第二个,2个不一样,sed的情况很诡异,refer to this link http://bbs.chinaunix.net/thread-3557086-1-1.html

论坛徽章:
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
12 [报告]
发表于 2012-03-07 16:41 |只看该作者
本帖最后由 waker 于 2012-03-14 15:44 编辑

投降有鼓励奖吗?

第九题

  1. #! /bin/bash
  2. newpasswd=$(mkpasswd -l8)
  3. exec 3<>newpasswd.log
  4. echo -e "Newpasswd:\t$newpasswd\nClient\tStatus" >&3
  5. for ((i=1;i<1001;i++))
  6.         do
  7.                 client=$(printf "client%04d" $i)
  8.                 { ssh $client "echo $newpasswd|passwd --stdin orcale"
  9.                 echo -e "$client\t$?" >&3
  10.                 }&
  11.                 [ ${i: -1} -eq 0 ]&&wait
  12. done
  13. exec 3>&-
复制代码
第十题

  1. #! /bin/bash

  2. sqlplus myuser/mypassset <<EOF
  3. head off
  4. set feed off
  5. set headsep off
  6. set newp none
  7. set linesize 255
  8. set sqlblanklines OFF
  9. select id from employee1 order by id
  10. EOF >id_oracle
  11. sqlplus myuser/mypassset <<EOF
  12. head off
  13. set feed off
  14. set headsep off
  15. set newp none
  16. set linesize 255
  17. set sqlblanklines OFF
  18. select email from employee1 order by email
  19. EOF >email_oracle

  20. mysql -umyuser -pmypass -e "select id from dbSecond.employee2 order by id" >id_mysql
  21. mysql -umyuser -pmypass -e "select email from dbSecond.employee2 order by email" >email_mysql

  22. sort -m id_{oracle,myslq}|uniq -u >different_id.txt
  23. sort -m email_{oracle,myslq}|uniq -u >different_email.txt
复制代码
其它题在23#
http://bbs.chinaunix.net/forum.p ... &fromuid=467748

论坛徽章:
0
13 [报告]
发表于 2012-03-07 17:17 |只看该作者
本帖最后由 ywlscpl 于 2012-03-09 08:38 编辑

第一题:

  1. q:有区别
  2. 一.设置后FS这个内置变量不一样
  3. ywlscpl@ubuntu:~$ awk -F ' ' 'BEGIN{print "#"FS"#"}'
  4. # #
  5. ywlscpl@ubuntu:~$ awk -F '[ ]' 'BEGIN{print "#"FS"#"}'
  6. #[ ]#
  7. ywlscpl@ubuntu:~$ awk -F '[ ]+' 'BEGIN{print "#"FS"#"}'
  8. #[ ]+#
  9. 二.域分隔符不一样
  10. -F ' '  #以任意个(>=1)连续的空格或tab为分隔符,等同于-F '[ \t]+'
  11. -F '[ ]' #以单个空格为分隔符
  12. -F '[ ]+' #以任意个(>=1)连续的空格为分隔符
复制代码
第二题:

  1. q:不一样
  2. 虽都为"地址范围": 地址1,地址2
  3. awk在匹配时允许地址1,地址2匹配到相同行
  4. ywlscpl@ubuntu:~$ cat file
  5. foo1
  6. x
  7. foo1 foo2
  8. y
  9. foo1 foo2
  10. z
  11. foo2
  12. ywlscpl@ubuntu:~$ awk '/foo1/,/foo2/'  file
  13. foo1
  14. x
  15. foo1 foo2
  16. foo1 foo2
  17. ywlscpl@ubuntu:~$ sed -n '/foo1/,/foo2/p' file
  18. foo1
  19. x
  20. foo1 foo2
  21. foo1 foo2
  22. z
  23. foo2
复制代码
第三题:
  1. echo "a b c e f,1 2 3" |awk -F, '{split($1,m1," ");split($2,m2," ");for (i
  2. in m1) for (j in m2) print m1[i]m2[j]"\n"m2[j]m1[i]}'
复制代码
第四题
  1. echo aaabcccaaabbbccc | awk -F '' '{for (i=1;i<=NF;i++){if (!a[$i]++) b[++n]=$i;else
  2. b[n]=b[n]$i}}END{for (i=1;i<=n;i++) printf b[i]}'
复制代码
第六题
q:shell进行命令重组时,连续多个空格被解释为IFS

第七题
  1. awk -v RS='c|\n' '/a/{T=1}T{printf $0 RT}' file
复制代码
第八题
  1. seq 9 | awk -F '\n' -v RS= '{for (i=1;i<NF;i++) print $i,$(i+1),$(i+2)}'
复制代码

论坛徽章:
0
14 [报告]
发表于 2012-03-07 22:49 |只看该作者

论坛徽章:
0
15 [报告]
发表于 2012-03-08 08:22 |只看该作者
什么东西?

论坛徽章:
0
16 [报告]
发表于 2012-03-08 08:47 |只看该作者
学习下

论坛徽章:
0
17 [报告]
发表于 2012-03-08 10:04 |只看该作者
  1. 第一题:
  2. FS设为一个或者多个空格
  3. FS设为一个空格
  4. FS设为一个或者多个空格

  5. 第二题:
  6. 一样

  7. 第三题:
  8. echo {a,b,c,e,f}{1,2,3}  ??

  9. 第四题:
  10. sed 's/\([a-z]\)\1*/&|/g;s/^/&|/;:a s/\(|[a-z]\+|\)\(.*\)\1\(.*\)/\1\2|\3/;ta;s/|//g'

  11. 第五题
  12. 文件中没有续行符,\只是普通的字符;输入时的若有续行符,在文件中表现为续行,而不是\.

  13. 第六题
  14. 换行符被视为IFS

  15. 第七题:
  16. sed ':a N;s/\n/|/;$tb;ta;:b s/[^a]*\(a.*c\).*/\1/;s/|/\n/g' file
  17. 或者
  18. sed -n /a/,$(awk '/c/{line=NR}END{print line}' file)p file


  19. 第八题:
  20. seq 9 | awk 'NR==1{a=$1};NR==2{b=$1};NR>2{print a,b,$1;a=b;b=$1}END{print a,b}'
复制代码

论坛徽章:
0
18 [报告]
发表于 2012-03-08 10:34 |只看该作者
本帖最后由 gxj241040128 于 2012-03-08 14:42 编辑

占位
1, 有区别

2, 不一样

3,

4,

5,

6,

7,

8,

9,

  1. #!/bin/ksh

  2. typeset ora_passwd=""
  3. typeset RETURN=""
  4. echo > change_passwd_info.txt

  5. function get_passwd
  6. {
  7.     unset RETURN

  8.     while [ True ]
  9.     do
  10.     {
  11.         passwd=`cat /dev/urandom 2>/dev/null | sed 's/[^a-zA-Z0-9]//g' | strings -n 8 | head -n 1`
  12.         echo ${passwd} | grep "[a-z]" | grep "[A-Z]" | grep -q "[0-9]"
  13.         if [ $? -eq 0 ]
  14.         then
  15.         {
  16.             break
  17.         }
  18.         fi
  19.     }
  20.     done
  21.     RETURN=${passwd}

  22.     return RETURN
  23. }

  24. for client_num in `seq 1000`
  25. do
  26. {
  27.     get_passwd
  28.     ora_passwd=${RETURN}

  29.     client_name="client`printf "%04d" ${client_num}`"
  30.     ssh ${client_name} 'echo "${ora_passwd}" | passwd oracle --stdin' > change_oracle.log
  31.     if [ $? -eq 0 -a `cat change_oracle.log | grep "Changing password for oracle" | wc -l` -eq 1 ]
  32.     then
  33.     {
  34.         echo "${client_name} change the password success, the oracle's passwd is ${ora_passwd}" >> change_passwd_info.txt
  35.     }
  36.     else
  37.     {
  38.         echo "${client_name} change the password failed" >> change_passwd_info.txt
  39.     }
  40.     fi

  41. }
  42. done
复制代码
10

论坛徽章:
0
19 [报告]
发表于 2012-03-08 10:35 |只看该作者
只会简单的
1,
awk -F ' '  指定空格为分隔符(多个空格也为一个)
awk -F '[ ]' 指定单个空格为分隔符
awk -F '[ ]+' 指定空格为分隔符(多个空格也为一个) 正则符号+

2,处理结果是一样
打印/foo1/,/foo2/间的所有行且包含自身

论坛徽章:
3
处女座
日期:2014-11-05 11:02:4315-16赛季CBA联赛之四川
日期:2015-12-10 14:37:4015-16赛季CBA联赛之天津
日期:2017-09-08 18:39:34
20 [报告]
发表于 2012-03-08 10:38 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP