2013-05-14 3 views
0

J'ai un énorme fichier CSV avec des données, j'essaie de générer l'instruction d'insertion en bloc mySQL.awk créer un insert MySQL en vrac à partir csv

Les données présentées comme suit au format CSV

90927597|1356976813998|1356976814177|1356976817457|17756249959|17756249959|18663111085|17753220005|1090917|1775624995900|A 
90927599|1356976813098|1356976814797|1356976823738|12562175250|12562175250|12566502514|12565207040|1890362|1256217525000|A 
90927602|1356976813098|1356976814797|1356976823738|12562175250|12562175250|12566502514|12565207040|1890362|1256217525000|A 
90927603|1356976813098|1356976814797|1356976823738|12562175250|12562175250|12566502514|12565207040|1890362|1256217525000|A 

Je cherche à créer un insert en vrac qui combinera tous les 2 lignes dans instruction d'insertion unique

déclaration MySQL avec sortie désirée

insert into data (90927597,1356976813998,1356976814177,1356976817457,17756249959,17756249959,18663111085,17753220005,1090917,1775624995900,A,90927599,1356976813098,1356976814797,1356976823738,12562175250,12562175250,12566502514,12565207040,1890362,1256217525000,A); 
insert into data (90927602,1356976813098,1356976814797,1356976823738,12562175250,12562175250,12566502514,12565207040,1890362,1256217525000,A, 90927603,1356976813098,1356976814797,1356976823738,12562175250,12562175250,12566502514,12565207040,1890362,1256217525000,A); 

Merci

Répondre

3
$ cat tst.awk 
BEGIN{ FS="|"; OFS="," } 
{ 
    $1 = $1 
    head = ((NR%2) == 1 ? tail "insert into data (" : ",") 
    printf "%s%s", head, $0 
    tail = ");\n" 
} 
END { printf "%s", tail } 

$ awk -f tst.awk file 
insert into data (90927597,1356976813998,1356976814177,1356976817457,17756249959,17756249959,18663111085,17753220005,1090917,1775624995900,A,90927599,1356976813098,1356976814797,1356976823738,12562175250,12562175250,12566502514,12565207040,1890362,1256217525000,A); 
insert into data (90927602,1356976813098,1356976814797,1356976823738,12562175250,12562175250,12566502514,12565207040,1890362,1256217525000,A,90927603,1356976813098,1356976814797,1356976823738,12562175250,12562175250,12566502514,12565207040,1890362,1256217525000,A); 
+0

Merci Ed, puis-je limiter le nombre d'enregistrements par insertion? disons 100 enregistrements pour chaque insertion? c'est possible? – Deano

+1

Qu'est-ce qu'un enregistrement? D'où viennent les "A"? Publiez une contribution REPRÉSENTANTE et une sortie attendue car c'est très frustrant quand nous répondons à une question et ensuite vous dites "oh, non, en fait je veux faire quelque chose de différent" et ensuite nous devons comprendre ce que c'est en lisant les itérations des commentaires. –

+0

Avec tout le respect dû Ed, la question limite est mentionnée dans le corps de ma question, et je ne voulais pas demander des extras après avoir obtenu une réponse. Merci pour votre aide tho! – Deano

1

Avec awk:

$ awk 'BEGIN{printf "%s","insert into date ("}$NF{gsub(/\|/,",");printf "%s",$0}END{print ");"}' file 
insert into date (90927597,1356976813998,1356976814177,1356976817457,17756249959,17756249959,18663111085,17753220005,1090917,1775624995900,A90927599,1356976813098,1356976814797,1356976823738,12562175250,12562175250,12566502514,12565207040,1890362,1256217525000,A); 

Une façon plus concise et tr:

$ echo "insert into date ($(tr -d '\n' < file));" | tr '|' ',' 
insert into date (90927597,1356976813998,1356976814177,1356976817457,17756249959,17756249959,18663111085,17753220005,1090917,1775624995900,A90927599,1356976813098,1356976814797,1356976823738,12562175250,12562175250,12566502514,12565207040,1890362,1256217525000,A); 
+0

Merci, savez-vous s'il y a un moyen de limiter l'option d'impression awk 100 lignes par déclaration? – Deano

+0

'print' imprime une ligne par énoncé et je n'utilise pas' print'. Veuillez clarifier ce que vous voulez dire. –

+0

maintenant, en utilisant votre solution, je peux créer un gros fichier avec énorme instruction d'insertion en bloc unique qui a des milliers d'enregistrements. Puis-je séparer cela? en plusieurs déclarations groupées? chaque disons a 100 enregistrements? – Deano