从日志文件中获取唯一值的有效方法

时间:2017-04-24 02:31:35

标签: shell awk

有一个10GB的大型日志文件,格式如下:

node123`1493000000`POST /api/info`app_id=123&token=123&sign=abc
node456`1493000000`POST /api/info`app_id=456&token=456&sign=abc
node456`1493000000`POST /api/info`token=456&app_id=456&sign=abc
node456`1493000000`POST /api/info`token=456&sign=abc&app_id=456

现在我想从日志文件中获取唯一的app_ids。例如,上面的日志文件的预期结果应为:

123
456

我使用shell脚本awk -F 'app_id=' '{print $2}' $filename | awk -F '&' '{print $1}' | sort | uniq来做,并且有更有效的方法吗?

2 个答案:

答案 0 :(得分:0)

如果日志文件的名称是log_file.txt,则可以使用以下命令:

  1. grep -Po "(?<=&app_id=)[0-9]+" log_file.txt

  2. awk -F "[&=]" '{print $4}' log_file.txt

答案 1 :(得分:0)

更改日志文件名称

    awk '{print $17" "$18" "$19" "$20}' log.txt |sort -k1|uniq  >> z #apache
    # filename on line number(0-9) awk result
    while read x;
    do
    echo $x
    grep "$x" log.txt | wc -l 
    done < z