LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1045|回复: 5

求教,问个循环判断的问题

[复制链接]
发表于 2008-12-15 09:12:39 | 显示全部楼层 |阅读模式
for str1 in aa bb cc dd ...
   do
  for str2 in aa bb cc dd...
     do
.....


done
done

我现在的问题是只想计算str1和str2的组合数,就是说,如果

$str1$str2 = $str2$str1  那么就只作一次循环

如果aabb已经做过了,那么 bbaa就不做了

新手请教大家,这该怎么实现呢,想了半天,没有想到好的方法
发表于 2008-12-15 15:44:30 | 显示全部楼层
i=0
for str1 in aa bb cc dd ee
do
echo $i
j=0
for str2 in aa bb cc dd ff
do
if [[ "$i" -le "$j" ]]
then
   your jobs
fi
((j++))

done
((i++))
done
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-16 12:52:10 | 显示全部楼层
我昨天想了一个稍微复杂的办法:

declare -a paris
j=-1
for STA1 in  aa bb cc dd ee
do
        for STA2 in   aa bb cc dd ee
        do
j=$[j+1]
paris[j]=$STA1$STA2
echo paris=${paris[j]}
echo parisall=${paris[@]}

donext="YES"

if test $STA1 != $STA2
then
i=-1

        while test $i -lt $j
                do
                i=$[i+1]
                          if test $STA2$STA1 = ${paris}
                        then
                        echo test2= $STA2$STA1
                        donext="NO"
                        fi
        done
fi

echo donext= $donext
done
done


你这个方法比较简单,也适合我的问题。非常感谢,学习了

不过就你给的那个例子来说,eeaa或者aaee是没有做的。
就是说,在两个list中,只有他们完全相同时(也正是我的问题),
才能正确实现。如果不同的话,就丢了一些对,比如eeaa


Post by haimming803;1924216
i=0
for str1 in aa bb cc dd ee
do
echo $i
j=0
for str2 in aa bb cc dd ff
do
if [[ "$i" -le "$j" ]]
then
   your jobs
fi
((j++))

done
((i++))
done
回复 支持 反对

使用道具 举报

发表于 2008-12-16 22:11:17 | 显示全部楼层
我复制错了
是存在这个问题
想想
回复 支持 反对

使用道具 举报

发表于 2008-12-17 14:06:33 | 显示全部楼层
如果只是组合问题,有不错的方法,我把你的帖子贴到了chinaunix问了下,你可以去看看
ttp://bbs.chinaunix.net/thread-1335628-1-2.html
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-17 16:42:15 | 显示全部楼层


我去看了下,多谢啦

不懂awk,我只是在一个计算中用到,自己也不是学这个的,呵呵
看到awk后面的一串,就觉得象乱码,头大
哈哈

就我的问题你那个简单的方法就行

如果两个list不同,我就用我那个复杂的,效率不高的方法
虽然土了点,不过对我来说,比较容易读




Post by haimming803;1925225
如果只是组合问题,有不错的方法,我把你的帖子贴到了chinaunix问了下,你可以去看看
ttp://bbs.chinaunix.net/thread-1335628-1-2.html
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表