Aqui está uma abordagem usando Python. Observe que esse é um caso clássico para a coleção do Contador
#!/usr/bin/env python3
import argparse
from collections import Counter
def read(f):
"""Reads the contents of param=value file and returns a dict"""
d = {}
with open(f,'r') as fin:
for item in fin.readlines():
s = item.split('=')
d[s[0]] = int(s[1])
return d
def write(f, d):
"""Writes dict d to param=value file 'f'"""
with open(f, 'w') as fout:
for k,v in sorted(d.items()):
fout.write('{}={}\n'.format(k,v))
def subtract(d1, d2):
"""
Subtracts values in d2 from d1 for all params and returns the result in result.
If an item is present in one of the inputs and not the other, it is added to
result.
Note: order of arguments plays a role in the sign of the result.
"""
c = Counter(d1.copy())
c.subtract(d2)
return c
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('file1', type=str, help='path to file 1')
parser.add_argument('file2', type=str, help='path to file 2')
parser.add_argument('outfile', type=str, help='path to output file')
args = parser.parse_args()
d1 = read(args.file1)
d2 = read(args.file2)
d3 = subtract(d1,d2)
write(args.outfile, d3)
Salve o código acima em um arquivo chamado subtract_params
e adicione permissões executáveis. Pode então ser chamado como:
subtract_params file1.txt file2.txt result.txt