2010-12-21 69 views
0

慶典主需要...獲取行計數 - AWK,sed的,用grep

從多個日期比較mysqldumps,我需要SQL GROUP BY,ORDER BY功能......,但是,命令行...

使用grep/sed/awk我需要查找所有INSERT語句,然後導出每個表名的行數。我真的很喜歡每表名太字節數...

一個典型的行看起來是這樣的:

INSERT INTO `admin_rule` ... 

匹配的INSERT,然後匹配``表名,通過獨特的表名

計數
+1

更全面的輸入/輸出描述會爲您提供更好的答案。例如說一個3-5個輸入條目的列表以及你期望看到的輸出。 – SiegeX 2010-12-21 01:10:30

回答

1

這個怎麼樣小AWK片段:

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

編輯:測試用例這裏:

$ 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

看起來這是獲得第一個或最後一個值,但不能彙總所有記錄:如: catalog_category_flat_store_1,1,3457 core_store,1196 catalog_category_flat_store_2,1,3459 shipping_matrixrate,1,14765 ......但感謝您的答覆! – 2010-12-21 00:54:25

+0

是的,樣本數據會很好。它確實爲我的虛擬數據添加它們: $ 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 2010-12-21 01:33:26

+0

我猜「每個表名的字節數」意味着實際數據而不是整個SQL語句的長度。在END子句中做一個'asort()',這樣你就有'ORDER BY'。 – 2010-12-21 01:45:29