如何从日志文件中提取字符串

时间:2019-05-08 14:21:19

标签: bash shell

我有一个日志文件,我想编写一个bash脚本以将信息从该日志解析到另一个.txt文件。我在如何允许用户选择所需的特定文本方面遇到了麻烦。

我的日志文件包含:

06 May 19 03:40:35 3 abCodeClearTrap Error Clear Trap (agent: 12367a12, chassis:12367a12, ErrIdText: ERROR ID TEXT, csssi: EXTIFG, clearedID: 0x089088394)
06 May 19 03:44:35 3 abCodeErrorTrap Error Trap (agent: 12368a15, chassis: 12368a15, ErrIdText: Skip this item, csssi: SSRSSR, clearedID: 0x089088394)

说用户要解析日期,时间,座席,清除和ErrIDText。 到目前为止,我已经写过

file="home/docs/abc.log"
parse_log_data(){
while read line ; do
date=$( awk -F: '{print $1, $2, $3}' )
clock=$( awk -F: '{print $4}' )
id=${ awk -F : '{print $5}' )
agent=$( grep -o 'agent[^"]*' )
Clear=$( grep -o 'Clear[^"]*' )
errIdText=$( grep -o 'errIdText[^"]*' )

我不确定我所做的是否正确,对您的帮助将不胜感激。 预先感谢。

1 个答案:

答案 0 :(得分:0)

尝试一下。在#2行上,只需用echo替换您要使用这些变量的内容即可。

while IFS=, read date clock id agent errid clear; do
  echo $date $clock $id $agent $errid $clear
done < <(
  gawk -v OFS=, '{
    match($0, /agent: ([^,]+).*ErrIdText: ([^,]+).*clearedID: ([^)]+)/, a)
    print $1 FS $2 FS $3, $4, $5, a[1], a[2], a[3]
  }' home/docs/abc.log
)
相关问题