awkまたはsedを使用してmysql.logを単純な形式に再フォーマットするにはどうすればよいですか?
私はmysql.logの一部を持っています:
131024 13:17:40 1 Query select * from test_numbers
1 Query select
n.id,
n.name,
n.value
from test_numbers AS n
limit 0, 50
1 Query select
count(*)
FROM test_numbers
1 Query SHOW STATUS
131024 13:17:50 1 Query SHOW STATUS
131024 13:18:00 1 Query select * from test_numbers
1 Query select
n.id,
n.name,
n.value
from test_numbers AS n
limit 0, 50
1 Query select
count(*)
FROM test_numbers
1 Query SHOW STATUS
「クエリ」行が複数の行にまたがっています。この形式に再フォーマットしたい:
131024 13:17:40 1 Query select * from test_numbers
131024 13:17:40 1 Query select n.id, n.name, n.value from test_numbers AS n limit 0, 50
131024 13:17:40 1 Query select count(*) FROM test_numbers
131024 13:17:40 1 Query SHOW STATUS
131024 13:17:50 1 Query SHOW STATUS
131024 13:18:00 1 Query select * from test_numbers
131024 13:18:00 1 Query select n.id, n.name, n.value from test_numbers AS n limit 0, 50
131024 13:18:00 1 Query select count(*) FROM test_numbers
131024 13:18:00 1 Query SHOW STATUS
複数行の「クエリ」を1行にまとめた場合。
私はいくつかのスクリプトを試しましたが、失敗します:
sed -r ':a;N;$!ba;s/\n(^(([0-9]+\t[0-9:]+)|(\t\t[0-9:]+)))/ \1/g' mysql.log
awk '/^(([0-9]+ [0-9:]+)|(\t\t[0-9:]+))/{print "";next}{printf $0}END{print "";}' mysql.log
ありがとう!私はいくつかの貢献を修正しました。投稿された回答を確認してください。