shell文本处理

1、题目:

  编写一个程序统计连续出现的单词个数,读取文件,文件内容格式是一行字符串,如:aaabbcddddacc ,输出成3a2b1c4d1a2c

解:echo "aaabbcddddacc"|awk -F '' '{for(i=1;i<=NF;i++) if(!p){p=$i;t++} else if ($i==p) {t++} else if  (p!=$i) {printf t p;p=$i;t=0;t++}}END{printf t p}'

解2:echo "aaabbcddddacc" |perl -ne '/(((.)(?=\3))+.|.)(?{print length($1),$3||$1})(*SKIP)(?!)/;'

解3:echo "aaabbcddddacc" |awk -F '' '{x=$1;while($0){if(sub("^"x,"")){n++}else{printf n x;n=0;x=$1}}}END{print n x}'

解4:echo "aaabbcddddacc" |grep -Po '(((.)(?=\3))+.|.)' |awk -F '' '{printf length $1}'

解5:echo "aaabbcddddacc" |awk -F '' '{x=$1;while($0){if(sub("^"x,"")){n++}else{printf n x;n=0;x=$1}}}END{print n x}'
解6:grep . -o <<<abcaaabbbcccdddeee |awk '{a[$1]+=1}END{ORS="";for(i in a)print a[i]i}'
解7:awk -F '' '{for(i=0;i++<NF;){if($i==$(i+1))s=s$i;else{printf length($i""s)$i;s=""}}print ""}' <<<bcaaabbbcccdddeee
解8:grep -o . <<<bcaaabbbcccdddeee |uniq -c|sed -r 's# ##g'|xargs | sed 's# ##g'
解9:grep -o . <<<bcaaabbbcccdddeee |uniq -c| sed -r ':a;N;$!ba;s# |\n##g'

posted @ 2016-10-13 17:48  snale1989  阅读(212)  评论(0编辑  收藏  举报