Como listar todas as combinações de palavras?

1

Eu estou procurando por um forro que alcance algo assim (com 2 ou mais strings de argumento):

$ make_combinations "1 2" "a b c"
1 a
1 b
1 c
2 a
2 b
2 c

Claro que eu poderia criar loops aninhados, mas se houver uma maneira genérica e rápida de conseguir isso, seria melhor. Isso seria muito útil para usar com xargs.

Obrigado antecipadamente!

    
por AFusco 30.03.2017 / 15:59

2 respostas

5
printf "%s\n" {1,2}" "{a,b,c}
1 a
1 b
1 c
2 a
2 b
2 c

Ou

echo {1,2}" "{a,b,c} | xargs -n 2
1 a
1 b
1 c
2 a
2 b
2 c

Como @George Vasiliou menciona em seu comentário quando a lista pode ser escrita como um intervalo, você pode usá-lo como abaixo:

printf '%s\n' {1..2}" "{a..c} 
    
por 30.03.2017 / 16:03
0
function brace {
  first=$1
  first=${first//,/\\,}
  first=${first//\{/\{}
  first=${first//\}/\\}}
  if [[ $first =~ [[:space:]] ]]
  then
    first=${first// /,}
    str={"${first}"}
  else
    str="${first}"
  fi
  shift
  for arg
  do
    arg=${arg//,/\\,}
    arg=${arg//\{/\{}
    arg=${arg//\}/\\}}
    if [[ $arg =~ [[:space:]] ]]
    then
      arg=${arg// /,}
      str="${str}"'" "{'"$arg"'}'
    else
      str="${str}"'" "'"${arg}"
    fi
  done
  eval printf '%s\n' "$str"
}

$ brace } "a b" { "c,d,e f"
} a { c,d,e
} a { f
} b { c,d,e
} b { f
    
por 30.03.2017 / 18:33

Tags