Sed和awk一直是文本分析的神器,最近学习了陈皓的两篇博文,小试牛刀如下。
1. 背景
有些Map/Reduce数据产出之后,对于value数量不足的记录,要求在数据端予以补全。在这里,我们要求每条记录中有10个value,用逗号,“,”,进行分隔。
对于补全之后的结果,是不是可以保证每条记录中有10个value,我们需要进行验证。思路如下。
a) 从HDFS中导出数据为文本格式;
b) 使用awk和sed进行文本的分析;
c) 根据结果得出结论。
下面是分析的步骤。
2. 分析步骤
2.1 数据导出(略)
2.2 文本分析
原始的文本内容如下图。主要是看下文件的格式。原始内容过大,我们使用管道“|”和more命令防止输出内容过多。
图2.2.1 原始文本内容
在这里,第一列是key,第二列是对应的value。我们主要关心value的数量。提取value的值如下。主要是打印第二列的内容。
图2.2.2 提取value
下面可以得到每行的记录数量。在这里,我们使用FS重新定义了字段分隔符为“,”,使用NF获取一条记录中的列数,也就是value的个数。
图2.2.3 获取每行的value的数量
然后使用awk的统计功能,获取每个value数对应的记录数。如下图。我们使用了awk的数组功能进行统计,然后使用for循环将结果打印出来。
图2.2.4 获取统计结果。
为了使结果看起来更友好,我们对结果进行sort排序,记得使用“-n”参数,使其按照数字进行排序。另外,可以使用wc命令统计文件中的行数,即总记录数,如下图。
图2.2.5 最终结果
2.3 结论
根据上面的分析,我们得知文件中总记录为1101522,其中有10个value的记录数有1100253,占比99.8848%。这个结果是可以接受的。
当然我们这里的目的还是为了说明awk和sed的使用,下面是进一步的延伸。
2.4 更进一步
为了达到统计分析的目的,可以有多种方法。上面的只是一种,下面还有一种。
1)
awk '{print $2}' a.txt | awk 'BEGIN {FS=","} {print NF,"\t",$0 } ' | awk '{a[$1]++;} END {for (i in a) print i "\t" a[i];}' | sort –n
2)
awk '{print $2}' a.txt | sed 's/,/ /g' | awk '{a[NF]++} END {for (i in a) print i "\t" a[i];}' | sort –n
第一个就是我们上面分析时使用的方案。
第二个中,思路是使用sed将“,”替换为空格“ ”,使其可以更方便的被分析,直接使用NF即可。
另外,可以使用比较运算,找出特定个数的记录。
awk '{print $2}' a.txt | sed 's/,/ /g' | awk 'NF==10 {print $0}' | wc –l
通过修改不同的参数,结合wc命令,可以得到特定value数的记录数。这样也可以实现我们的目的。
本来还想使用split函数直接在第一步就将value部分进行分割,但是没成功;后面再试试。
3. 其它
上面的数据分析,在数据产出的时候也可以进行,直接使用hive进行统计。我们在这里仅用来作为awk和sed学习的一个示例。
4. 参考资料
Awk:《AWK 简明教程》
Sed:《sed 简明教程》
相关推荐
通过深入学习这些章节,你可以掌握AWK的基本概念和高级技巧,从而在数据处理任务中发挥出AWK的强大能力。无论你是数据分析新手还是经验丰富的开发者,理解并熟练运用AWK都能极大地提升你的工作效率。
`awk`的学习需要结合实际案例进行,通过编写和运行脚本来熟悉其用法和功能。 总结,`awk`是Linux文本处理的重要工具,其灵活性和强大的功能使其在数据分析、日志分析等领域有着广泛的应用。通过深入学习和实践,...
本资料包中的"awkѧϰ"和"awk学习"文件可能包含实战案例、练习题及解释,是学习awk的好资源。建议结合这些实例逐步实践,加深对awk的理解,提升文本处理技能。不过,请注意,如果资料存在质量问题,可以考虑寻找更新...
`awk` 是一种强大的文本分析工具,常用于处理和解析结构化的文本文件,如日志文件、配置文件等。在Linux和Unix系统中,`awk` ...通过不断地实践和学习,你将能够有效地利用 `awk` 解决日常工作中遇到的文本处理问题。
在"awk学习资料最近整理的资料"这个压缩包中,你可以找到一系列关于awk的学习资源,帮助你掌握这一技能。以下是一些主要的awk知识点: 1. **基本语法**:awk的工作原理基于行处理,每一行被视为一个记录,每个记录...
- 示例中提到的投诉数据问题,AWK可以用来处理换行符并转换数据格式以适应导入系统的要求。 - 当数据源存在不一致性,如字段个数不固定,AWK可以检查字段数量并进行填充或过滤,以满足导入数据库的需求。 6. **...
#### 十、示例代码解析 - **长度超过72个字符的行**: ```awk length > 72 ``` 打印长度超过72个字符的所有输入行。 - **具有偶数个字段的行**: ```awk NF % 2 == 0 ``` 打印具有偶数个字段的所有行。 - *...
Linux中的AWK是一种强大的文本分析工具,用于对文件或数据流进行模式匹配和处理。它在系统管理和数据分析中被广泛使用。AWK的工作原理是基于用户定义的规则(也称为模式)来处理输入数据,根据这些规则进行筛选、...
示例应用 例如,要找出一个CSV文件中价格大于100的项,可以使用以下命令: ```bash awk -F ',' '$3 > 100 {print $0}' sales.csv ``` 这里,`-F ','`指定了字段分隔符为逗号,`$3 > 100`是模式,表示匹配第三列值...
学习AWK的最佳方式是从实践中学习。除了本文提供的基础指南外,还可以参考以下资源: 1. **官方文档**:访问GNU AWK的官方网站获取最新文档。 2. **在线教程**:互联网上有许多优秀的AWK教程,适合初学者和高级用户...
在学习和使用awk时,了解不同版本的awk也十分重要。书中介绍了POSIX标准的awk,以及一些流行的免费版本如gawk和商业版本的awk。这些不同实现之间可能存在一些差异,了解这些差异有助于在不同的使用场景中选择和利用...
### awk学习笔记精要 #### 1. awk简介 awk是一种功能强大的文本处理语言,主要用于在Linux/Unix环境中处理文本和数据。它能够从标准输入、文件或其它命令的输出中提取并处理数据,支持自定义函数和动态正则表达式...
接着,书籍转而解决如何使用awk解决问题,其中提到了awk函数库,以及一些实用的awk程序示例,这说明书籍不仅仅是理论的介绍,还包含了实际应用和案例研究。 在“Moving Beyond Standard awk with gawk”部分,作者...
《Effective awk Programming, 4th Edition》是一本深入讲解awk编程技术的专业书籍,旨在帮助读者提升在文本处理和...通过这本书的学习,你将能充分利用awk的强大功能,为日常的文本分析和数据操作带来显著的效率提升。
本手册作为一份重要的AWK学习资源,对于想要精通AWK语言的程序员来说,具有非常高的参考价值。通过深入阅读和实践手册中的示例和技巧,开发者可以大幅度提升他们在文本处理和模式匹配方面的技能。
这个压缩包`awk实用程序源码.zip`包含了`awk`的源码,这对于深入理解其工作原理和学习如何编写自己的`awk`程序非常有帮助。 首先,让我们来看看`makefile`。`makefile`是Linux中构建程序的关键文件,它定义了如何...
#### 六、AWK语法示例 AWK的基本语法结构由模式和动作组成。模式定义了哪些行将被处理,而动作则定义了如何处理这些行。 - **模式**: `{pattern}` 定义了需要匹配的文本特征。 - **动作**: `{action}` 在匹配成功...
《sed与awk 第二版 例程 源代码...本书的例程和源代码提供了丰富的实践机会,是深入理解sed和awk不可多得的学习资源。因此,无论是初学者还是经验丰富的开发者,都应该充分利用这些资料,不断提升自己的文本处理技能。