2010-12-21 11 views
0

bash Master benötigt ...Get Linie zählt die INSERT des von Tabellennamen von mysqldump - awk, sed, grep

Um mysqldumps von mehreren Terminen vergleichen zu können, muß ich SQL GROUP BY, ORDER BY-Funktionalität ... aber auf der Befehlszeile ...

Mit grep/sed/awk Ich muss für alle INSERT-Anweisungen suchen, dann eine Zeile Anzahl pro Tabellenname exportieren. Ich würde wirklich eine Byteanzahl pro name Liebe zu ...

Eine typische Zeile sieht wie folgt aus:

INSERT INTO `admin_rule` ... 

Spiel der INSERT, entsprechen dann den Tabellennamen in ``, das Zählen von eindeutigen Tabellenname

+1

eine umfassendere Eingabe/Ausgabe Beschreibung würde Sie bessere Antworten erhalten. Sagen Sie zum Beispiel eine Liste von 3-5 Eingaben und was Sie als Ausgabe erwarten. – SiegeX

Antwort

1

Wie über diesen kleinen awk-Schnipsel:

BEGIN { FS="`" } 
/^INSERT/ { count[$2]+=1; bytes[$2]+=length($0) } 
END { for(table in count) print table "," count[table] "," bytes[table]; } 

Edit: Testfall hier:

$ cat test.sql 
INSERT INTO `t1` VALUES('a', 12, 'b'); 
INSERT INTO `t2` VALUES('test', 'whatever', 3.14); 
INSERT INTO `t3` VALUES(1, 2, 3, 4); 
INSERT INTO `t2` VALUES('yay', 'works', NULL); 
INSERT INTO `t2` VALUES(NULL, 'something' 2.71); 
INSERT INTO `t3` VALUES(5, 6, 7, 8); 
INSERT INTO `t5` VALUES('beta', 'gamma'); 
INSERT INTO `t6` VALUES('this', 'is', 'table', 'six'); 
$ awk -f t.awk <test.sql 
t5,1,41 
t6,1,54 
t1,1,38 
t2,3,144 
t3,2,72 
+0

sieht aus wie dieser erste oder der letzte Wert wird immer, aber nicht alle Datensätze Summieren: zB: catalog_category_flat_store_1,1,3457 core_store, 1196 catalog_category_flat_store_2,1,3459 shipping_matrixrate, 1,14765 ... aber danke für die Antwort! –

+0

Ja, Beispieldaten wären nett. Es fügt sie für meine Dummy-Daten hinzu: $ cat test.sql INSERT INTO 't1' VALUES('a', 12, 'b'); INSERT INTO 't2' VALUES('test', 'whatever', 3.14); INSERT INTO 't3' VALUES(1, 2, 3, 4); INSERT INTO 't2' VALUES('yay', 'works', NULL); INSERT INTO 't2' VALUES(NULL, 'something' 2.71); INSERT INTO 't3' VALUES(5, 6, 7, 8); INSERT INTO 't5' VALUES('beta', 'gamma'); INSERT INTO 't6' VALUES('this', 'is', 'table', 'six'); $ awk -f t.awk Jester

+0

Ich rate die "Byteanzahl pro Tabellenname" bedeutet die tatsächlichen Daten und nicht die Länge der SQL-Anweisung als Ganzes. Und tun Sie ein 'asort()' in der END-Klausel, so dass Sie die 'ORDER BY' haben. –

Verwandte Themen