fork(2) download
  1. #!/bin/bash
  2.  
  3. # ideone boilerplate: run in temp dir
  4. t=$(mktemp -d -t ideone.XXXXXXXX) || exit
  5. trap 'rm -rf "$t"' ERR EXIT
  6. cd "$t"
  7.  
  8. cat <<\: >first.csv
  9. "Hello, how are you","honey"
  10. 23,456
  11. :
  12.  
  13. cat <<\: >second.csv
  14. another,one,bites,the,dust
  15. 1,2,3,4,5
  16. :
  17.  
  18. cat <<\: >third.csv
  19. "all in all, it's just","another brick in the wall"
  20. pink,floyd
  21. :
  22.  
  23. cat <<\: >merge.py
  24. import csv
  25. import sys
  26.  
  27. fields = 0
  28. for filename in sys.argv[1:]:
  29. with open(filename) as raw:
  30. for row in csv.reader(raw):
  31. if len(row) > fields:
  32. fields = len(row)
  33. titles = row
  34. break
  35.  
  36. writer = csv.writer(sys.stdout)
  37. writer.writerow(titles)
  38.  
  39. for filename in sys.argv[1:]:
  40. with open(filename) as raw:
  41. for idx, row in enumerate(csv.reader(raw)):
  42. if idx == 0:
  43. next
  44. row.extend([''] * (fields - len(row)))
  45. writer.writerow(row)
  46. :
  47.  
  48. python3 merge.py *.csv
  49.  
Success #stdin #stdout 0.03s 9748KB
stdin
Standard input is empty
stdout
another,one,bites,the,dust
23,456,,,
1,2,3,4,5
pink,floyd,,,