私はCannot proceed: the cube has no data
巨大なtest.txtファイルで昨日の午後22時30分と今日の午前00時30分の間のタイムスタンプの間にある文字列を見つけようとしています。
スクリプト:
tac test.txt | awk -v today=$(date "+%d") -v yesterday=$(date "+%d" -d yesterday) '/Cannot proceed: the cube has no data/ {f=$0; next} f{if (($3==yesterday && $4>"22:30:00") || ($4==today && $4<="00:30:00")) {print; print f} f=""}'
テスト.txt:
[Thu Jun 8 07:56:17 2014]Local/data///47480280486528/Info(1019022)
Writing Database Mapping For [data]
[Thu Jun 8 12:56:38 2014]Local/data///47480280486528/Info(1250008)
Setting Outline Paging Cachesize To [8192KB]
[Thu Jun 8 22:56:20 2014]Local/data///47480280486528/Info(1013202)
Cannot proceed: the cube has no data
[Thu Jun 8 23:26:18 2014]Local/data///47480280486528/Info(1013205)
Received Command [Load Database]
[Thu Jun 9 00:16:23 2014]Local/data///47480280486528/Info(1019018)
Writing Parameters For Database
[Thu Jun 9 00:21:20 2014]Local/data///47480280486528/Info(1013205)
Writing Parameters For Database
[Thu Jun 9 00:29:00 2014]Local/data///47480280486528/Info(1013205)
Cannot proceed: the cube has no data
[Thu Jun 9 01:25:21 2014]Local/data///47480280486528/Info(1019018)
Cannot proceed: the cube has no data
出力:
[Thu Jun 8 22:56:20 2014]Local/data///47480280486528/Info(1013202)
Cannot proceed: the cube has no data
一致する文字列がすべて出力に表示されないのはなぜですか?私がここで何を見逃しているのでしょうか?
ベストアンサー1
私はawk
それに慣れていないので、動作について具体的なアドバイスをすることはできませんが、これがうまくいくと確信しています。
tac ./file |
sed -e "/$(date -d"2 days ago")/q" -e \
'/Cannot proceed: the cube has no data/!d;h;n;G'
このようにファイルを上下に読み取ると、tac
ターゲットエラーが最初に来て、日付バーがその後に来る必要があります。したがって、h
ターゲットの後ろから前の行の最後の行に会い、次の行をドラッグして最後の行を最後に追加して効果的に並べ替えます。
d
他のすべての行を削除します。
2日前の日付が見つかるまでこの検索を続け、その時点はq
適切です。