Если у вас установлено ruby
:
$ ruby -0777 -F'\n' -lane '$F.combination(2) { |c| puts c.join(" ")}' ip.txt
a b
a c
a d
a e
b c
b d
b e
c d
c e
d e
-0777
глотать весь файл (должно быть нормально, так как в ОП упоминается, что размер файла мал)-F'\n'
разделение на основе новой строки, поэтому каждая строка будет элементом массива $F
$F.combination(2)
генерировать комбинации 2
элементов за раз { |c| puts c.join(" ")}
распечатать при необходимости $F.uniq.combination(2)
для 3 элементов одновременно:
$ ruby -0777 -F'\n' -lane '$F.combination(3) { |c| puts c.join(" ")}' ip.txt
a b c
a b d
a b e
a c d
a c e
a d e
b c d
b c e
b d e
c d e
Сperl
(не общие)
$ perl -0777 -F'\n' -lane 'for $i (0..$#F) {
for $j ($i+1..$#F) {
print "$F[$i] $F[$j]\n" } }' ip.txt
a b
a c
a d
a e
b c
b d
b e
c d
c e
d e
Сawk
$ awk '{ a[NR]=$0 }
END{ for(i=1;i<=NR;i++)
for(j=i+1;j<=NR;j++)
print a[i], a[j] }' ip.txt
a b
a c
a d
a e
b c
b d
b e
c d
c e
d e