有一个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
来做,并且有更有效的方法吗?
答案 0 :(得分:0)
如果日志文件的名称是log_file.txt,则可以使用以下命令:
grep -Po "(?<=&app_id=)[0-9]+" log_file.txt
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