Não foi possível resistir a criar um pequeno script Python para isso. Salvar em um arquivo, por exemplo mergecols.py
, torne-o executável e a saída de
./mergecols.py 2.csv 1.csv 1.csv 2.csv 2.csv 1.csv
será
foo,bar,a,b,c,a,b,c,foo,bar,foo,bar,a,b,c
baz,qux,d,e,f,d,e,f,baz,qux,baz,qux,d,e,f
,,g,h,i,g,h,i,,,,,g,h,i
(com 1.csv
e 2.csv
de outra resposta). Aqui está o script:
#!/usr/bin/env python
import sys
fileNames = sys.argv[1:]
files = [ open(n, "rt") for n in fileNames ]
numberOfColumns = [ None ] * len(fileNames)
while True:
newParts = [ ]
foundEntries = False
for idx in range(len(files)):
line = files[idx].readline()
if line:
parts = line.strip().split(",")
if numberOfColumns[idx] is None:
numberOfColumns[idx] = len(parts)
else:
if numberOfColumns[idx] != len(parts):
raise Exception("Number of columns in '{}' changed".format(fileNames[idx]))
newParts += parts
foundEntries = True
else:
if numberOfColumns[idx] is None:
raise Exception("{} does not appear to contain lines".format(fileNames[idx]))
newParts += [ "" ] * numberOfColumns[idx]
if not foundEntries:
break
sys.stdout.write(",".join(newParts) + "\n")