#!/bin/bash
# ideone boilerplate: run in temp dir
t=$(mktemp -d -t ideone.XXXXXXXX) || exit
trap 'rm -rf "$t"' ERR EXIT
cd "$t"
cat <<\: >first.csv
"Hello, how are you","honey"
23,456
:
cat <<\: >second.csv
another,one,bites,the,dust
1,2,3,4,5
:
cat <<\: >third.csv
"all in all, it's just","another brick in the wall"
pink,floyd
:
cat <<\: >merge.py
import csv
import sys
fields = 0
for filename in sys.argv[1:]:
with open(filename) as raw:
for row in csv.reader(raw):
if len(row) > fields:
fields = len(row)
titles = row
break
writer = csv.writer(sys.stdout)
writer.writerow(titles)
for filename in sys.argv[1:]:
with open(filename) as raw:
for idx, row in enumerate(csv.reader(raw)):
if idx == 0:
next
row.extend([''] * (fields - len(row)))
writer.writerow(row)
:
python3 merge.py *.csv
IyEvYmluL2Jhc2gKCiMgaWRlb25lIGJvaWxlcnBsYXRlOiBydW4gaW4gdGVtcCBkaXIKdD0kKG1rdGVtcCAtZCAtdCBpZGVvbmUuWFhYWFhYWFgpIHx8IGV4aXQKdHJhcCAncm0gLXJmICIkdCInIEVSUiBFWElUCmNkICIkdCIKCmNhdCA8PFw6ID5maXJzdC5jc3YKIkhlbGxvLCBob3cgYXJlIHlvdSIsImhvbmV5IgoyMyw0NTYKOgoKY2F0IDw8XDogPnNlY29uZC5jc3YKYW5vdGhlcixvbmUsYml0ZXMsdGhlLGR1c3QKMSwyLDMsNCw1CjoKCmNhdCA8PFw6ID50aGlyZC5jc3YKImFsbCBpbiBhbGwsIGl0J3MganVzdCIsImFub3RoZXIgYnJpY2sgaW4gdGhlIHdhbGwiCnBpbmssZmxveWQKOgoKY2F0IDw8XDogPm1lcmdlLnB5CmltcG9ydCBjc3YKaW1wb3J0IHN5cwoKZmllbGRzID0gMApmb3IgZmlsZW5hbWUgaW4gc3lzLmFyZ3ZbMTpdOgogICAgd2l0aCBvcGVuKGZpbGVuYW1lKSBhcyByYXc6CiAgICAgICAgZm9yIHJvdyBpbiBjc3YucmVhZGVyKHJhdyk6CiAgICAgICAgICAgIGlmIGxlbihyb3cpID4gZmllbGRzOgogICAgICAgICAgICAgICAgZmllbGRzID0gbGVuKHJvdykKICAgICAgICAgICAgICAgIHRpdGxlcyA9IHJvdwogICAgICAgICAgICBicmVhawoKd3JpdGVyID0gY3N2LndyaXRlcihzeXMuc3Rkb3V0KQp3cml0ZXIud3JpdGVyb3codGl0bGVzKQoKZm9yIGZpbGVuYW1lIGluIHN5cy5hcmd2WzE6XToKICAgIHdpdGggb3BlbihmaWxlbmFtZSkgYXMgcmF3OgogICAgICAgIGZvciBpZHgsIHJvdyBpbiBlbnVtZXJhdGUoY3N2LnJlYWRlcihyYXcpKToKICAgICAgICAgICAgaWYgaWR4ID09IDA6CiAgICAgICAgICAgICAgICBuZXh0CiAgICAgICAgcm93LmV4dGVuZChbJyddICogKGZpZWxkcyAtIGxlbihyb3cpKSkKICAgICAgICB3cml0ZXIud3JpdGVyb3cocm93KQo6CgpweXRob24zIG1lcmdlLnB5ICouY3N2Cg==
another,one,bites,the,dust
23,456,,,
1,2,3,4,5
pink,floyd,,,