在群里也混了不少时间了.总结一些实例
#统计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,ls,cp,等等。