Чтобы сохранить порядок и не читать файл дважды, я бы сделал:
awk '{f1[NR] = $1; f2[NR] = $2}
END {
for (i = 1; i <= NR; i++)
for (j = 1; j <= NR; j++)
print f1[i]f1[j], f2[i]f2[j]
}' file
Теперь, это сохраняет все содержимое файла в памяти перед обработкой (как в @taliezin's approach). Если вы не хотите этого делать, то вам придется прочитать файл столько раз, сколько в нем строк, как в подходе @G-Man. Но использование awk
вместо sh
/bash
(который для этого не предназначен) было бы намного эффективнее:
awk '{f1=$1; f2=$2
while ((getline < "file") > 0) print f1$1, f2$2
close("file")}' file