2つのタイムスタンプ間のログを抽出する方法、行は日付/時刻で開始することも、開始しないこともあります。以下で試しましたが、日付/時刻で始まる行のみを抽出します。日付時刻の形式は次のとおりです。2014-04-07 23:00
$ awk \
'$0 ~ /^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-2][0-9]:[0-5][0-9]/
{
if ($1" "$2 >= "2014-04-07 23:00") p=1;
if ($1" "$2 >= "2014-04-08 02:00") p=0;
}
p { print $0 }' log
私のサンプルデータは次のとおりです。
2014-04-07 22:59:10.001 agaggagag
gagagg
2014-04-07 23:40:33.345 aegsgssdh
wqtqttqtqtq
post
agggsdgg
2014-04-08 01:00:54.777 ggsdgwettwetewt
cvdgwetegdkiytitityi
error
2014-04-08 02:02:22.009 qwwqtwtwebbcbewdhshsdh
asgsaftewtewt
1253536443755475
2014-04-08 10:55:34.934 etwtewtewppip
jklhlljkjvncncmmm
sghywywywywyw
2014-04-07 23:00
との間のすべてのデータを抽出したいと思います。2014-04-08 02:00
ベストアンサー1
パターンマッチングでは、RE の先頭は^
式を行の先頭にバインドします。式がどこにでも一致するようにするには、その式を削除する必要があります。
あなたのif...
声明は、日付/時刻フィールドがおよび$1
にあると仮定します$2
。これは定義によって必ずしも真ではないかもしれません。これを試してみてください(あなたのデータサンプルがないのでテストされていません)。
awk '
{
if (match($0, /\<[0-9]{4}-[0-9]{2}-[0-9]{2} [0-2][0-9]:[0-5][0-9]\>/))
{
s = substr($0, RSTART, RLENGTH)
if (s >= "2014-04-07 23:00") p=1
if (s >= "2014-04-08 02:00") p=0
}
}
p { print $0 }
' log
サンプルデータ出力
2014-04-07 23:40:33.345 aegsgssdh
wqtqttqtqtq
post
agggsdgg
2014-04-08 01:00:54.777 ggsdgwettwetewt
cvdgwetegdkiytitityi
error