我想在两个时间戳之间获取日志,但我没有特定的时间戳。如果我使用以下命令在日志中有特定的时间戳,我可以使用命令sed进行提取
sed -rne '/$StartTime/,/$EndTime/'p <filename>
我的查询是,由于我从我的数据库中提取的特定 StartTime 和 EndTime 可能不会出现在日志文件中,我将不得不提取使用&gt; =和&lt; = sign 在我提供的 StartTime 和 EndTime 附近的时间之间进行记录。我尝试了以下命令,但它不起作用。
awk '$0>=st && $0<=et' st=$StartTime et=$EndTime <filename>
示例输入和输出
输入
从数据库检索的时间
StartTime - 2017-11-02 10:20:00
EndTime - 2017-11-02 11:20:00
日志中显示的时间
T1 - 2017-11-02 10:17:44
T2 - 2017-11-02 11:19:32
输出:T1&amp;之间的整个日志文字T2
示例日志
2017-03-03 10:43:18,736 [main] WARN - ORACLE_HOSTNAME=xxxxxxxxxx[OVERRIDES:
xxxxxxxxxxxxxxxx]
2017-03-03 10:43:18,736 [main] WARN - NLS_DATE_FORMAT=DD-MON-YYYY
HH24:MI:SS [OVERRIDES: DD-MON-YYYY HH24:MI:SS]
2017-03-03 10:43:18,736 [main] WARN - xxxxUsername=MDMPIUSER [OVERRIDES: MDMPIUSER]
2017-03-03 10:43:18,736 [main] WARN - BUNDLE_GEMFILE=uri:classloader://installer/Gemfile [OVERRIDES: uri:classloader://installer/Gemfile]
2017-03-03 10:43:18,736 [main] WARN - TIMEOUT=900 [OVERRIDES: 900]
2017-03-03 10:43:18,736 [main] WARN - SHLVL=4 [OVERRIDES: 4]
2017-03-03 10:43:18,736 [main] WARN - HISTSIZE=1000 [OVERRIDES: 1000]
2017-03-03 10:43:18,736 [main] WARN - JAVA_HOME=/usr/java/jdk1.8.0_60/jre [OVERRIDES: /usr/java/jdk1.8.0_60/jre]
2017-03-03 10:43:20,156 [main] WARN - APP_PROPS=/home/xxx/conf/appProperties [OVERRIDES: /home/xxx/conf/appProperties]
答案 0 :(得分:0)
你可以尝试
awk -v start="$StartTime" -v end="$EndTime" '
function fonct(date)
{
gsub(/-|,| |:/,"",date)
return date
}
BEGIN{
start=fonct(start)
end=fonct(end)
}
{
a=fonct($1$2)
if (a>=start && a<=end)print $0
}' infile