用于解析日志文件的Bash脚本

时间:2017-01-09 14:34:58

标签: bash parsing awk catalina

我正在尝试解析日志文件以解压缩userIds。以下是catalina.out中每个日志的设置方式。我想只提取userId。我该怎么做我尝试了awk和grep,但它返回整个块而不仅仅是userId。此外,我想获得每个唯一的userId一次,因为相同的用户可以多次登录,所以我只想要我写的文件只需要一次。你能帮助我了解从哪里开始?谢谢!

以下是我尝试过的命令:

<link href="https://cdn.rawgit.com/Killercodes/281792c423a4fe5544d9a8d36a4430f2/raw/42e5b91a60ea5e25b7bb42c0a315d9e740c92f0/GistDarkCode.css" rel="stylesheet" type="text/css">

当我这样做而不是返回userId时,它返回整个块(如下所示)

日志格式:

awk '/userId/' catalina.out

grep "userId" catalina.out

4 个答案:

答案 0 :(得分:0)

我假设你的用户名会被发现像&#34; userId&#34;:&#34; test_chumma&#34;等等,如果是这种情况,那么下面的内容也可以帮助你。

awk -F'[":,]' '/userId/{print $11}'  Input_file

当然,如果您有更多要求,请向我们展示更多具有完整条件的样品输出。

答案 1 :(得分:0)

awk的另一个例子:

awk -F"[:,]" '$1 ~ /^{/ {gsub("\"","",$4); print $4}' inFile.log

在这里,我们使用awk命令的:标记,按冒号F或逗号-F[:,]拆分记录,然后如果第一个字段在记录$1以括号/^{/开头(我们使用正则表达式运算符~作为条件)然后我们将第4个字段的双引号替换为{{1}并打印结果gsub("\"","",$4)

print $4

答案 2 :(得分:0)

这是另一个结合awk和unix剪切的解决方案:

awk '{split($0,a,":"); print a[2]}' catalina.out | cut -f2 -d","
"userId"

但这也适用于您发布的示例。

答案 3 :(得分:0)

awk -F\" '{print $6}' file 

userId