#!/usr/bin/awk -f

# Use \t as output separator
BEGIN {
    OFS     = "\t"
    CONVFMT = "%.0f"
}

# Count number of files: increment on the first line of each new file
FNR == 1 { ++nfiles }

{
    # 3D array containing all corresponding fields across files
    for (i = 1; i <= NF; ++i) {
        values[FNR, i][nfiles] = $i
    }
}

END {
    # Loop over lines of array with sums
    for (i = 1; i <= FNR; ++i) {
        # Loop over fields of current line in array of sums
        for (j = 1; j <= NF; ++j) {
            # Headers
            if (i == 1) {
                $j = values[1, j][1]
                continue
            }

            # Build record with means (+ 95% confidence interval)
            sum = 0
            error = 0
            nvalid = nfiles
            for(k = 1; k <= nfiles; ++k) {
                if (values[i, j][k] == "-") {
                    nvalid -= 1
                    continue
                }
                sum += values[i, j][k]
            }

            if (nvalid < nfiles) {
                $j = "-"
                continue
            }

            mean = sum / nvalid

            for(k = 1; k <= nfiles; ++k) {
                if (values[i, j][k] == "-") {
                    continue
                }
                error += (values[i, j][k] - mean)^2
            }

            sigma = sqrt(error / nvalid)
            conf = 1.96 * sigma / sqrt(nvalid)
            if (conf == 0) {
                $j = mean
            } else {
                $j = mean "±" conf
            }
        }

        print $0
    }
}
