bash - SQLITE3 Import .csv via Mac Terminal and Skip the First Row -
i have thousands of .csv
files i'd import sqlite3
database. each .csv file has labels on first row.
my idea run loop on file names , import them using .import
command:
sqlite3 options.db ".mode csv data" ".import $f data"
the problem import first row contains labels.
question: how .import
.csv
files without importing first row of each file?
thanks helping! :d
assume file1.csv
looks this:
file1,line1 file1,line2 file1,line3 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 1,2,3,4,5,6
and file2.csv
looks this:
file2,line1 file2,line2 file2,line3 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 1,2,3,4,5,6
then can make awk
print csv files whilst skipping first line (where fnr
, i.e. file line number, 1) this:
awk -f, 'fnr==1{next} 1' *csv
output
file1,line2 file1,line3 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 1,2,3,4,5,6 file2,line2 file2,line3 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 1,2,3,4,5,6
then can check number of fields present on each line, , if not 23, add many commas necessary make 23:
awk -f, 'fnr==1{next} nf!=23{$0=$0 substr(",,,,,,,,,,,,,,,,,,,,,,",1,23-nf)}1' *csv
output
file1,line2,,,,,,,,,,,,,,,,,,,,, file1,line3,,,,,,,,,,,,,,,,,,,,, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,,,,, 1,2,3,4,5,6,,,,,,,,,,,,,,,,, file2,line2,,,,,,,,,,,,,,,,,,,,, file2,line3,,,,,,,,,,,,,,,,,,,,, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,,,,, 1,2,3,4,5,6,,,,,,,,,,,,,,,,,
so, actual complete solution, this:
awk -f, 'fnr==1{next} nf!=23{$0=$0 substr(",,,,,,,,,,,,,,,,,,,,,,",1,23-nf)}1' *csv > newbigfile.csv
and import newbigfile.csv
sqlite
.
Comments
Post a Comment