在所有可能的组合中一次使用两个变量循环 - UNIX

时间:2016-09-16 14:05:08

标签: loops unix for-loop while-loop

我需要一个使用所有变量的命令,一次两个以所有可能的组合

遵循这个逻辑:(这个命令不起作用,它只是一个例子):

finish()

,最终结果将是

File.out

for t1&t2 in 62 63 64 65; do 

echo "Horse $t1 and $t2" >> File.out 

done

我想使用它,更具体地说,使用这样的R程序:

Horse 62 and 63  
Horse 62 and 64  
Horse 62 and 65
Horse 63 and 64
Horse 63 and 65
Horse 64 and 65

我需要在所有可能的组合t1和t2中一次使用两个不同的变量,它们定义了我的主文件" ageecent.txt"的列,必须进行分析。感谢您的关注和支持。

1 个答案:

答案 0 :(得分:1)

像arkascha写的那样。您只需要嵌套for循环并添加一个if以检查两个数字是否不同。 bash示例如下所示:

#/bin/bash
NUMBERS="62 63 64 65"
for i in $NUMBERS; do
  for j in $NUMBERS; do
    if [ "$i" -ne "$j" ]; then
      echo "Horse $i and $j"
    fi
  done
done

产生

Horse 62 and 63
Horse 62 and 64
Horse 62 and 65
Horse 63 and 62
Horse 63 and 64
Horse 63 and 65
Horse 64 and 62
Horse 64 and 63
Horse 64 and 65
Horse 65 and 62
Horse 65 and 63
Horse 65 and 64

- 编辑

也可以不重复数字组合。您可以使用bash的数组功能并基本上对其进行编程或使用如下所示的参数处理(可能有更好看的方式,但它可以工作):

#/bin/bash

NUMBERS="62 63 64 65"
LIST=$NUMBERS

dequeue_from_list() {
  shift;
  LIST=$@
}

for i in $NUMBERS; do
  dequeue_from_list $LIST
  for j in $LIST; do
    echo "Horse $i and $j"
  done
done

产生

Horse 62 and 63
Horse 62 and 64
Horse 62 and 65
Horse 63 and 64
Horse 63 and 65
Horse 64 and 65