Couldn't resist creating a small Python script for this. Save to a file, e.g. mergecols.py
, make it executable and the output of
./mergecols.py 2.csv 1.csv 1.csv 2.csv 2.csv 1.csv
will be
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
(with 1.csv
and 2.csv
of another answer). Here's the 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")