Aqui está uma solução básica em Python (sem pacotes extravagantes de terceiros) que deve ser bem parecida com o que você está procurando:
#!/usr/bin/env python2
# snp.py
import sys
# Get the name of the data file from the command-line
data_file = sys.argv[1]
# Read and parse the data from the text file
data = []
with open(data_file, 'r') as file_handle:
for line in file_handle:
data.append([float(n) for n in line.split()])
# Get the number of rows and columns
rows = len(data)
cols = len(data[0])
# Iterate over adjacent pairs of rows
for r in range(rows//2):
# Iterate over columns
for c in range(cols):
# Compute the sum of the two matching entries the pair of rows
t = data[2*r][c] + data[2*r+1][c]
if t:
# Divide each entry by the sum of the pair
data[2*r][c] /= t
data[2*r+1][c] /= t
# Convert the data array back into formatted strings and print the results
for row in data:
print(' '.join(['{0: <8}'.format(round(x,6)) for x in row]))
Isso funciona para você? Deve ser fácil ajustar se estiver um pouco fora da formatação.