一些shell脚本实例

时间:2022-07-05 21:47:19

在群里也混了不少时间了.总结一些实例

#统计QQ消息里面某个用户改名字的记录
# awk -f
# 聊改名字记录
#特殊例子 例如
#2013-11-28 9:23:56 北京-AA-Vip<123456789@qq.com>
#2013-11-28 9:23:42 中山-BB(10570765)

/^[0-9]+ [0-9:]+ [<(].*[>)] ?$/{
next
}

/^[0-9-]+ [0-9:]+ .*[<(].*[>)] ?$/{
    QQ=gensub(/^[0-9-]+ [0-9:]+ [^(<]*[(<]([^)>]*)[)>]/,"\\1",$0)
    NAME=gensub(/^[0-9-]+ [0-9:]+ ([^<(]*)[<(].*/,"\\1",$0)
    if(A[QQ]==""){
        A[QQ]=NAME
        next
    }
    if(QQ in A){
        if(A[QQ]!=NAME){
            print QQ" :\t\t"A[QQ]," ==> ",NAME
            A[QQ]=NAME
        }
    }
}

0,1,2,10,22,00,01,2,3,33
得出下面的结果
00,01,02,10,22,00,01,02,03,33

方法1:
echo '0,1,2,10,22,00,01,2,3,33' | awk -vRS=,  '{printf("%02d,",$1)}END{printf("\b")}'
方法2:
echo "0,1,2,10,22,00,01,2,3,33" | awk -vRS=, 'BEGIN{a=""}{b=sprintf("%02d",$0);a=a?a "," b:b;}END{print a}'

求数值N以内的质数和

awk -vmax=4 'BEGIN{nomax=0;yesmax=0;for(i=2;i<=max;i++){for(j=2;j<=sqrt(i);j++){if(i%j==0) break};if(j>sqrt(i)) yesmax+=i;else nomax+=i;}; print "非质数和=" nomax " 质数和=" yesmax}'

 有关字符串截取总结

PS:大叔总结的很是经典,特在此记录
看大键盘,$是字符串调用,左面的#就是左面操作,右面的%就是右面操作 一个符号是最小匹配,两个符号是最大匹配 例: tsbill:/work21>a="1/2/3/4/5" tsbill:/work21>echo ${a#*/} 2/3/4/5 tsbill:/work21>echo ${a##*/} 5 tsbill:/work21>echo ${a%/*} 1/2/3/4 tsbill:/work21>echo ${a%%/*} 1

 有关grep中正则表达式和通配符的注意事项

在文本过滤工具里,都是用正则表达式,比如像awk,sed,等,是针对文件的内容的。 使用正则的时候需要添加-E选项

而通配符多用在文件名上,比如查找find,lscp,等等。