免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: send_linux

[学习共享] 2013年ChinaUnix社区Shell编程大赛!(获奖名单公布)!  关闭 [复制链接]

论坛徽章:
0
发表于 2013-06-19 16:47 |显示全部楼层
本帖最后由 ljwd1000 于 2013-06-25 17:53 编辑

就找会做了做了。。
  1. 1> awk '{a[$NF]++}END{for(i in a)print i,a[i]}' illegal.log | sort -k2 -nr | head -n 10

  2. 2>
  3. #!/bin/bash

  4. start_time=`date +"%b %d, %Y %l:%M %p" -d "10 minute ago"`
  5. now_time=`date +"%b %d, %Y %l:%M %p"`

  6. e_code=`awk '/"'$start_time'"/,/"'$now_time'"/{if($0~/<Error>/){print "error";exit}}'`

  7. if [ "$e_code" = "error" ]
  8. then
  9.     echo "error for wls_ms1.out" | mail -s "error" admin@chinaunix.net
  10. fi

  11. 3>


  12. 5> echo 1234 | awk -vFS="" '{for(i=1;i<=NF;i++)s+=$i}END{print s}'

  13. 6>
  14. time="2012-01-01"

  15. echo $time | awk '{gsub(/-/," ",$0);print strftime("%j",mktime($0" 00 00
  16. 00"))}'

  17. echo $time | awk '{gsub(/-/," ",$0);print strftime("%Y-%m-%d",mktime($0" 00 00
  18. 00")-24*3600)}'

  19. 7>
  20. 1. awk '{for(i=1;i<=NF;i++)a[i]=a[i]$i;gsub(/ +/,"",$0);b[NR]=$0}END{for(i in a)x=x+a[i]+b[i];print x}'

  21. 10>
  22. 1: ls -1| awk '!/^20130605/'
  23. 2: ls -1 | awk '{x=$0;gsub(/[ \]\[]/,"",$0);print "mv \047"x"\047 "$0}' | sh
  24. 3: awk 'NR==FNR{a[$0]=$0;next}($0 in a)' <(ls -1 dirB) <(ls -1 dirA) | xargs -i rm -f dirA/{}
  25. 4: find dirA dirB -type f -name "*.XQF" -o -name "*.che" | awk -F'[/.]' '{a[$2]++}END{for(i in a)if(a[i]>1)print i}' | xargs -i rm -f {dirA,dirB}/{}.che
复制代码

论坛徽章:
0
发表于 2013-06-19 17:34 |显示全部楼层
第五题

#!/bin/sh
p=$1
len=`echo "${#p}"`

for i in `seq ${len}`
do
    var=`echo $p|cut -c $i`
    result=$((result+${var}))
done

echo $result

论坛徽章:
0
发表于 2013-06-19 17:38 |显示全部楼层
第八题

能删除,rm能识别出来有空格的文件

论坛徽章:
0
发表于 2013-06-19 17:42 |显示全部楼层
本帖最后由 haigui815 于 2013-06-19 17:47 编辑

总于把第一题做出来了。有意思,继续努力做下面的题。
第一题:cat illegal.log |tr -t "\t" " "|tr -s " "|awk  '{print $NF}'|sort -n|uniq -cd|sort -n|tail -10

论坛徽章:
0
发表于 2013-06-19 17:45 |显示全部楼层
第六题

#!/bin/sh
for i in `seq ${#1}`
do
    result=$((result+`echo $1|cut -c $i`))
done
echo $result

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
发表于 2013-06-19 17:53 |显示全部楼层
呀,有比赛,今天忙晕头了下午才上论坛看到。

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
发表于 2013-06-19 17:57 |显示全部楼层
seesea2517 发表于 2013-06-19 17:53
呀,有比赛,今天忙晕头了下午才上论坛看到。


欢迎参与,还早呢,呵呵

论坛徽章:
0
发表于 2013-06-19 18:17 |显示全部楼层
1题目

awk '{a[$NF]++;}END{for (i in a){print i"\t"a} }' illegal.log |sort -k2nr|head
awk '{print $NF}' illegal.log |sort |uniq -c |sort -k1nr|head


第二题

b=`date +%s`
list=`awk -F'<Error>' '/\<Error\>/{print $1}' wls_ms1.out |sed 's/[<>]//g'|xargs -i -t date -d "{}" +%s`
for a in $list
do
c=`expr $b - $a`
if [ $c -lt 600 ];then
echo 错误| /bin/mail -s "错误" admin@ChinaUnix.net
fi
done

第三题

备份容易,不了解增量。。。。


第四题
command1 && command2 || command3
这种方式,如果command2 执行返回不为真也会执行command3
if的方式就只会执行2或3中的一个


第五题
echo 1234 |awk -F '' '{ for(i=1;i<NF+1;i++)a+=$i  ;print a}'


第六题
a=`date +%Y%m%d`
date -s 20130523 +%j
date -s $a

第七题

算法过。。。

第八题

可以删除 *代表所有

第九题

不清楚

第十题

1、
ls |grep -v 20130605

2、
ls |xargs -i -t rename [ "" {}
ls |xargs -i -t rename ] "" {}
ls |xargs -i -t rename " " "" {}


3、4题目
怎么算重复?删除是两个都删除?

论坛徽章:
0
发表于 2013-06-19 18:40 |显示全部楼层
1、有一小撮别有用心的人,他们会想办法获取论坛的用户名列表,然后用弱密码逐个尝试每一个用户名。针对这一情况,论坛程序会把每一次登陆失败

的记录放在日志里面。请编写脚本找出尝试登陆失败次数最多的 top 10 的IP地址和登陆失败次数。测试数据见附件illegal.log
##############################################
#!/bin/bash
cat illegal.log |awk '{print $NF}' | awk '{sum[$0]++}END{for(i in sum){print i,sum}}'|sort -n -k2|tail -10
##############################################

2、请编写脚本监控日志文件中的关键字<Error>,一旦发现该关键字就马上发邮件给admin@ChinaUnix.net,样例数据见附件wls_ms1.out,要求如下:
(1)假设该脚本在crontab中每10分钟执行一次,每次运行时只检测最近十分钟之内的日志里面有没有出现关键字,十分钟之前的日志不要误报。
(2)样例数据仅供参考,实际日志文件比较大(比如1GB),请充分考虑代码效率。
(3)应用程序会实时地更新这个日志文件,因此不允许对该文件进行分割。
##########################################
#!/bin/bash
stat_time=$(date -d"10 minutes ago" +"%F %H:%M:%S")
sta_time=$(date -d"$stat_time $(($(date -d "$stat_time" "+%M")%10))  minutes ago" +"%F %H:%M:00")
end_time=$(date -d "$sta_time 9 minutes" +"%F %H:%M:59")
log_sta_time=$(date -d"$sta_time" +"%y%m%d %H:%M:%S")
log_end_time=$(date -d"$end_time" +"%y%m%d %H:%M:%S")
echo $sta_time
echo $end_time
echo $log_sta_time
echo $log_end_time

cat filename.log|awk -v log_sta_time="$log_sta_time" -v log_end_time="$log_end_time" '
BEGIN{
        gsub(/ 0/,"  ",log_sta_time)
        gsub(/ 0/,"  ",log_end_time)
}
{
        if($0~/^# Time: 1/)
        {
                if($0>="# Time: "log_sta_time)
                {
                        tag=1
                }
                if($0> "# Time: "log_end_time)
                {
                        exit
                }
        }
}tag' |awk '
BEGIN{
IGNORECASE=1
}
{
        if($0~/Error/)
        {
                sum++               
        }
}
END{
        if(sum>0)
        {

                system("echo \"日志文件出现错误"sum"次\"|mail -s \"时间 '$sta_time' admin@ChinaUnix.net\"")
        }
}'
###########################################################

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
发表于 2013-06-19 18:43 |显示全部楼层
只有shell版主可以看到所有回帖内容?还是所有版主都能看到回帖内容?
@send_linux
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP