Bash позволяет вам обращаться к позиционным параметрам, используя обозначение подстроки.
$ foo() { for ((i=1; i<=$#; i++)) { printf '%s ' "${@:$i}" "${@:1:$((i-1))}"; echo; }; }
$ foo one two three
one two three
two three one
three one two
Затем обработка нескольких строк ввода так же проста, как цикл while
:
$ while read -a a; do foo "${a[@]}"; done < input.txt
Pipes and Filters
and Filters Pipes
Filters Pipes and
Java Swing
Swing Java
Software Requirements Analysis
Requirements Analysis Software
Analysis Software Requirements
Или, если вы любите приключения, даже:
$ while read; do foo $REPLY; done < input.txt
Я не вижу никаких объяснений относительно того, как ваш пример выходных данных должен поступить в таком порядке, поэтому это решение игнорирует этот аспект вашего вопроса.
Обратите внимание, что это не обрабатывает все перестановки / комбинации, а только те, которые вы указали в своем вопросе.