从 mysqldump 中按表名获取 INSERT 的行数 - awk、sed、grep

发布于 2024-10-08 17:27:35 字数 281 浏览 2 评论 0原文

需要 bash master...

要比较多个日期的 mysqldump,我需要 sql GROUP BY、ORDER BY 功能...但是在命令行上...

使用 grep / sed / awk 我需要查找所有 INSERT 语句,然后导出每个表名的行数。我真的很喜欢每个表名的字节数...

典型的行如下所示:

INSERT INTO `admin_rule` ...

匹配 INSERT,然后匹配 `` 中的表名,按唯一表名计数

bash master needed...

To compare mysqldumps from multiple dates, I need sql GROUP BY, ORDER BY functionality... but on the command line...

Using grep / sed / awk I need to look for all INSERT statements, then export a line count per tablename. I'd really love a byte count per tablename too...

A typical line looks like this:

INSERT INTO `admin_rule` ...

match the INSERT, then match the tablename in ``, counting by unique tablename

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

且行且努力 2024-10-15 17:27:35

这个 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

How about this little awk snippet:

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

Edit: test case here:

$ 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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文