原帖由 bkj 于 2007-12-24 15:37 发表
统计原则:分别统计a-t的字母个数,要求每条记录至少5个字母,最多10个字母,且字母在a-t之间惟一。如果记录中存在数字则丢弃该条记录,但是每个字母用,;。:等符号隔开应视为有效记录;
同时满足上述条件的行 ...
#!/bin/bash FILE=~/shell/sed/cu28.txt #数据文件 while read LINE ; do #将标点符号去掉,并将大写转成小写 TEMP=$(echo $LINE | sed 's/,//g' | tr [:upper:] [:lower:]) NUM=${#TEMP} #转换为小写字母 CON=0 if [ ${#TEMP} -ge 5 ] && [ ${#TEMP} -le 10 ] #只有在5-10个字符的才去判断 then if [ ! $(echo $TEMP | grep "[0-9U-Zu-z]" ![]() then #这两个for循环判断变量内有无相同的字符,如有,则将CON值设置为1, for((i = 0 ; i <= $NUM -1 ; i++)) do TEMP1=${TEMP ![]() for ((j = i+1 ; j <= $NUM-1 ; j++)) ; do TEMP2=${TEMP ![]() if [ ${TEMP1} = ${TEMP2} ] ; then CON=1 fi done done #如果CON值为止。打印变量 if [ ${CON} -eq 0 ] ; then echo $LINE fi fi fi done <${FILE} |
原帖由 r2007 于 2007-12-24 20:39 发表
不知道理解了题意没有^_^
sed -n '/[0-9]/d;h;y/ABCDEFGHIJKLMNOPQRST/abcdefghijklmnopqrst/;/\([a-t]\).*\1/d;s/[^a-t]//g;/^.\{5,10\}$/{g;p}'
btw:
xyzabc
a b c d e f
a@b#c%d*e
这些如何处理?
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |