如何从日志文件中解析时间戳?

时间:2020-09-10 16:03:53

标签: string bash logging extract

我在Linux中有一个日志文件,其中包含此类信息:

20200910:16:59:38 gpbackup:gpadmin:mdw:024273-[INFO]:-Starting backup of database mydb
20200910:16:59:38 gpbackup:gpadmin:mdw:024273-[INFO]:-Backup Timestamp = 20200910165938

我需要获取时间戳记值(20200910165938)。在“时间戳记”,“等于”和“空格”一词之后,我只需要任何东西。在日志文件中,此行只有一次。

我该如何实现?

3 个答案:

答案 0 :(得分:2)

使用awk。打印行的最后一个字段(NF),其中Timestamp是末尾的第三个字段(NF-2)。

awk '$(NF-2)=="Timestamp" {print $NF}' file

答案 1 :(得分:1)

perl -lne 'print for /Timestamp\s+=\s+(\d+)/;' logfile

Perl单行代码使用以下命令行标志:
-e:告诉Perl在代码中而不是在文件中查找代码。
-n:一次遍历输入一行,默认情况下将其分配给$_
-l:在直接执行代码之前,先剥离输入行分隔符(默认为* NIX上的{"\n"),并在打印时附加它。

正则表达式的工作方式如下:
\s+:1个或多个空格。
\d+:1个或多个数字。
(\d+):捕获1个或更多数字。如果正则表达式匹配,则此“捕获组”(此处为时间戳)由正则表达式作为列表返回,然后打印。如果正则表达式不匹配,则返回一个空列表,并且不打印任何内容。

另请参见:

perldoc perlrun: how to execute the Perl interpreter: command line switches
perldoc perlre: Perl regular expressions (regexes)
perldoc perlre: Perl regular expressions (regexes): Quantifiers; Character Classes and other Special Escapes; Assertions; Capture groups

答案 2 :(得分:1)

首先,让我们创建一个测试数据文件。

pd.to_numeric(citydata.tcad_id.replace([np.inf, -np.inf], np.nan).dropna(), 
downcast='integer', errors='coerce')

现在使用一些通用的Unix工具提取时间戳。

cat <<EOF > data.txt
20200910:16:59:38 gpbackup:gpadmin:mdw:024273-[INFO]:-Starting backup of database mydb
20200910:16:59:38 gpbackup:gpadmin:mdw:024273-[INFO]:-Backup Timestamp = 20200910165938
  • grep-查找正确的行。
  • rev-反转行,以便第一个空格分隔时间戳记的结尾。
  • cut-提取反转的时间戳记
  • rev-将时间戳转换为适当的顺序。