Pessoalmente, eu faria a coisa toda no Awk do arquivo original em vez da metade no PHP e metade no Awk ou no Perl. Dado
file1.txt acima, o seguinte irá produzir a saída desejada:
{
Vals[$1]++;
Vals[$2]++;
Third_col[$1, $2] = Third_col[$2, $1] = $3;
}
END{
for (i in Vals) {
for (j in Vals) {
if (i == j || (i SUBSEP j in printed)) { continue }
Third_col_val = (i SUBSEP j in Third_col) ? Third_col[i, j] : 0;
print i, j, Third_col_val;
printed[j, i]++;
printed[i, j]++
}
}
}
Note que isso leva o tempo O (n 2 ), então para listas muito grandes (milhões de linhas), ele ficará lento e consome muita memória.