Estritamente, tenho que concordar que a questão está no limite de uma questão puramente programática.
Ao mesmo tempo: muito tentador e desafiador, como intermediário, não para responder, e já respondemos perguntas como essa antes.
O script
#!/usr/bin/env python3import sys
import sys
files = [[l.split() for l in open(f).readlines()] for f in [sys.argv[1], sys.argv[2]]]
for item in files[0]:
match = [line for line in files[1] if item[:2] == line[:2]]
if match:
try:
calc = abs(int(int(item[2]) - int(match[0][2])))
print(("\t").join(item[:3])+"\t"+match[0][2]+"\t", calc)
except TypeError:
pass
Como usar
- Copie o script em um arquivo vazio, salve-o como
analyze.py
-
Execute-o com os dois arquivos como argumentos:
python3 /path/to/analyze.py <file1> <file2>
Nos exemplos da sua pergunta:
$ python3 '/home/jacob/Bureaublad/pscript_1.py' '/home/jacob/Bureaublad/map/f2' '/home/jacob/Bureaublad/map/f1'
Ab Cd 150 100 50
Explicação
O script:
-
procura linhas nos dois arquivos dos quais as duas primeiras colunas correspondem:
for item in files[0]: match = [line for line in files[1] if item[:2] == line[:2]]
-
das linhas correspondentes, as duas primeiras colunas (correspondentes) são impressas, juntamente com as duas versões da terceira coluna .
if match: try: calc = abs(int(int(item[2]) - int(match[0][2]))) print(("\t").join(item[:3])+"\t"+match[0][2]+"\t", calc) except TypeError: pass
-
A diferença (absoluta) das duas últimas colunas é calculada (e impressa finalmente) na linha:
calc = abs(int(int(item[2]) - int(match[0][2])))
O script assume:
- todas as figuras são inteiros
- Você não deseja imprimir linhas que não têm as duas primeiras colunas correspondentes
- Cada uma das linhas tem apenas uma correspondência possível no outro arquivo