2012-03-01 13 views
5

Tôi đã đọc trên stackoverflow về việc sử dụng sed để trích xuất dữ liệu từ bãi sql, chính xác hơn, mục đích cuối cùng là trích xuất chèn cho một bảng cụ thể để chỉ khôi phục cái bàn kia.Trích xuất chèn sql với sed, cắt dòng

Tôi đang sử dụng này:

sed -n '/LOCK TABLES `TABLE_NAME`/,/UNLOCK TABLES/p' dump.sql > output.sql 

Vấn đề mà tôi đang gặp là chúng ta có chèn trên 1 dòng đó có hơn 50Mb dài, do đó khi giải nén chèn, sản lượng bị cắt giảm trước Cuối con đường. thích:

...... 
(4 
3458,'0Y25565137SEOEJ','001','PREPAR',1330525937741, 
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL), 
(43459,'666 

Tôi cố gắng để sử dụng awk và thậm chí đơn giản grep và kết quả là như nhau, dòng bị cắt.

Edit: Im sử dụng này trên một bãi chứa sql từ mysql và hệ thống tôi đang làm việc trên là một CentOS 5.2

+0

Liều 'dump.sql' đã cutted? – kev

+0

không, bãi chứa dài 85Gb và chèn này nằm trên 10% đầu tiên của tệp. – Ikaro

+0

Bạn đã thử điều này trên máy khác chưa? 50 MB đường dài không quá lớn. Ngay cả Cygwin cũng có thể xử lý các dòng khoảng 100 MB trên các cửa sổ. –

Trả lời

0

Nhưng nếu đó là một tập tin dump tạo ra với exp, bạn chỉ có thể nhập các bảng cần thiết với

imp user/pass tables=table1,table2 ... 
+0

Anh ấy nói 'MySQL' –

+0

Có, trong phần chỉnh sửa sau câu trả lời của tôi. Mà tôi đã không dự đoán, xin lỗi. –

1

Bạn có thể thử awk và xem nếu nó tốt hơn (tôi nghĩ vậy):

awk '/LOCK TABLES `TABLE_NAME`/,/UNLOCK TABLES/' dump.sql > output.sql