刚才为了选全站分类,寻找了小分钟。想来静心写写工作笔记,发篇blog还是挺麻烦,尤其对我这个懒人。为了子文为了坚持,忍耐下吧。
下面的文字,是小申工作的笔记。处理文本log的两次记录,备忘以后方便查询。这块我是刚入门的同学,应用也比较简单,高手看到之后,多多指教。
1、处理一:
引用
数据文件一:log_1.txt
[2010-03-04 07:29:02] [30789][visit:g.php][use:1101]
[2010-03-04 07:29:02] [474330][visit:g.php][use:1001]
[2010-03-04 07:29:02] [57159][visit:g.php][use:10201]
……n+1条
[时间] [用户id][visit:g.php][use:访问时候的参数]
分别是要提取“用户id”和“访问时候的参数”,这两项。
处理:这里用 awk
http://www.linux.gov.cn/shell/awk.htm来处理。
用到awk中 (-F)这个参数:
a、单独提取用户id:
~$:awk -F' \\[' '{printf( int($2)"\n")}' log_1.txt>ret_1.txt
or:
~$:awk -F'[' '{printf( int($3)"\n")}' log_1.txt>ret_1.txt
解释:命令一使用' '空格加'['做分隔符号,在'['前加上两个'\\'转一下。
命令二直接使用'[',所以打印的时候,打印的是 $3,
b、单独提取用户携带的参数,用'use:'做参数就可以了。
c、同时提取,多次使用awk,如:
~$:awk -F'\\]\\[visit:get.php\\]\\[use:' '{printf($1" "int($2)"\n")}' log_1.txt|awk -F' \\[' '{printf($2"\n")}'|head
总结三点:
a、awk的 -F 参数,一些特殊符号,用两个'\\'转。
b、处理部分,'{printf($1" "int($2)"\n")}',外面单引号,里面双引号。系统变量用单引号括起来,双引号被解释成是字符串。(不一定正确,但不会报错,哈哈),里面的内置函数 int()等,更多函数可以google awk 内置函数。
c、对于printf(),其实括号也可以不要的。里面的格式,用字符串拼凑:($1" "int($2)"\n"),也可以用c那种("%d\n",$2)。看怎么样方便。
2、处理二:
引用
log数据二:log_2.txt
10002 2010-01-09 15:08:16
10013 2010-01-21 11:55:34
10075 2010-01-28 16:22:54
……
格式:【用户id 年-月-日 时-分-秒】
做什么呢,不急,这是用户参与A活动的数据,这里还有第二份数据——用户参与B活动的数据。但在orale里面,
要求对比出提取出先参与活动A在参与B,或者是先参与B在参与A的两分用户id数据(用户可以多次参与活动)。
to do:
a、从orale里面导出数据:
引用
~$:sqlplus 服务器/用户名@密码
sql: set heading off;
sql: set trimout on;
sql: set trimspool on;
sql: set feedback off;
spool 最终生成的文件;//这里我们得到 'log_3.txt'
说明可以看看这里
http://xsb.itpub.net/post/419/49511
在接下来的命令中输入sql语句,这里没有什么好注意的,orale中,几个用在sql中的函数很有用,比如,这里,我们有一个字段是时间的,在orale以内部时间来储存,我们要到处为固定格式,可以用to_char()函数,我们这里在数据库里面的时间字段为timestamp。那么
引用
sql:
select distinct uid,to_char( timestamp, 'YYYY-MM-DD HH24:MI:SS' ) from ……
这样,得到一份和log_2.txt一样的log文件。
b、对于,log_3.txt,有需要处理的部分,如,前面的sql语句和中间的空行,可以用下面的语句去除空行
~$:sed '/^$/d' file
or_~$:awk '/./ {print}' file
or_~$:grep -v '^$' file
c、对于 log_2.txt和log_3.txt 因为用户可以多次参与活动,我们要做的是排序去重。
~$:sort -d file|uniq>file_ret
d、现在文件,排好续了,用jion可以把两个文件重合的部分得出来。但如何比较时间呢。之前我的想法是把文件中时间按部分转化为时间戳。但尝试了下,有点麻烦,没有现成的函数。倒是awk中,在printf的时候,用 strftime("%Y%m%d",$n)把时间戳转化为格式化字符串,反过来有点麻烦,请有经验的同学,指导一下。最后的做法是直接对比时间那两个字符串,awk提供字符串直接对比。
引用
格式:【用户id 年-月-日 时-分-秒】
因为时间中间用空格分开了,比较的时候有点麻烦,先awk一下,把两个字符段,连接起来。
~$:awk '{printf("%s %s_%s\n",$1,$2,$3)}' file
在jion就能得到这样的文件了
引用
2079 2010-02-02_12:14:55 2010-01-28_10:40:12
2090 2010-02-15_20:06:28 2010-02-01_20:50:32
2091 2010-03-05_16:38:59 2010-02-18_03:27:44
e、最后在执行比较的操作:
~$:awk '{if($2>$3)printf($0"\n")}' file>last_file
感觉没有什么好总结的了,记着备忘。
end.
分享到:
相关推荐
Linux中的`awk`命令是一个强大的文本分析工具,它允许用户基于特定的模式匹配对文本文件进行处理。在本文中,我们将深入探讨`awk`的基本概念、语法和常见用途。 首先,`awk`有三个主要版本:`awk`、`nawk`和`gawk`...
通过熟练掌握awk命令,Linux用户能够高效地处理日志文件、进行数据分析,甚至编写简单的脚本。在深入学习awk时,理解其工作原理、模式匹配机制以及如何编写复杂的动作,将极大地提升你在Linux环境中的工作效率。对于...
awk 是一个强大的文本分析工具,常用于处理结构化数据,如CSV、日志文件等。在Linux和Unix环境中,awk命令被广泛使用。本篇文章将详细介绍awk命令的使用,包括其基本语法、模式与动作、域和记录以及条件操作符。 1....
它被广泛应用于快速编写脚本来处理文本文件,如日志文件、配置文件等。Awk的核心功能在于能够方便地对文本数据进行筛选、分析和格式化。 #### 二、Awk的基本工作原理 Awk通过逐行读取输入文件,并对每一行执行一...
以上知识点涵盖了Awk的基础概念、程序结构、字段和记录的处理方法、格式化输出的技巧,以及Awk命令在实际中的应用。通过深入学习和实践这些知识点,可以有效提升使用Awk进行文本处理和数据分析的能力。
这种模式匹配动作的方式,使得awk在处理如日志文件、报告数据等结构化文本数据时变得异常高效。 awk程序的运行涉及到几个核心概念,比如字段分隔符(FS)、记录分隔符(RS)、字段变量($1、$2、...、$NF)等。字段...
Linux中的`awk`命令是一个强大...总之,`awk`是Linux系统中处理文本的强大工具,其灵活性和效率使其在数据分析、日志分析等场景中广泛应用。通过熟练掌握`awk`命令,你可以更有效地操作和解析文本数据,提高工作效率。
3. 自动化脚本:在shell脚本中嵌入sed和awk命令,实现复杂的文本处理功能。 在学习Sed和awk时,读者需要注意,这些工具依赖于正则表达式进行文本匹配。因此,熟悉正则表达式的语法和使用方法对掌握sed和awk至关重要...
在《Sed&Awk 2th Edition》中,读者将学习到如何结合这两个工具进行文本处理工作。书中的实例可能涵盖了从基本的文本替换和过滤,到复杂的正则表达式应用,再到利用Awk进行数据分析。此外,书中还可能讲解了如何编写...
AWK是一种强大的文本分析工具,尤其在处理结构化文本文件如日志、配置文件时,其强大之处得以显现。在Linux和Unix环境中,AWK常用于数据处理和报告生成。以下将详细介绍AWK语言的基础知识及其重要性。 1. **基本...
在IT领域,Unix系统中的`awk`工具是一个强大的文本分析工具,它被广泛用于处理和解析日志文件、数据报表以及其他形式的结构化文本。这个"unix awk 视频教程"很可能涵盖了`awk`的基本概念、语法以及高级用法,帮助...
`awk` 是一种强大的文本分析工具,常用于处理和解析结构化的文本文件,如日志文件、配置文件等。在Linux和Unix系统中,`awk` 提供了一种灵活的方式来提取、过滤和处理数据。本篇文章将深入讲解 `awk` 的基本用法和...
- **日志文件分析**:Awk 常用于解析系统日志文件,提取关键信息,如错误记录、性能指标等,以便进一步分析和处理。 - **数据转换**:在数据预处理阶段,使用 Awk 对 CSV 或其他格式的数据文件进行清洗、格式化或...
### Linux文本处理命令合集详解 #### diff/patch:查找/修补文本差异 - **diff** 命令用于比较两个文件之间的不同之处。 - `diff version1.txt version2.txt`:简单地列出两个文件之间的不同行。 - `diff -u ...
在GNU/Linux环境中,它被广泛用于数据分析、日志分析和报告生成等任务。AWK的设计理念是让用户能够通过模式匹配和动作来处理文本,而无需编写完整的程序。本教程将引导你深入理解AWK的各个方面,无论你是软件开发者...
在IT领域,`awk`是一种强大的文本分析工具,常用于处理结构化数据,如日志文件、CSV数据等。`set`在`awk`中是一个关键的概念,它涉及到变量、数组以及模式匹配等方面。本手册将深入探讨`awk set`的使用方法,帮助你...
Linux中的`awk`是一个强大的文本分析工具...总结,`awk`是Linux文本处理的重要工具,其灵活性和强大的功能使其在数据分析、日志分析等领域有着广泛的应用。通过深入学习和实践,我们可以充分利用`awk`来提高工作效率。