`
yuanc00
  • 浏览: 29947 次
社区版块
存档分类
最新评论

awk学习示例

阅读更多

Sedawk一直是文本分析的神器,最近学习了陈皓的两篇博文,小试牛刀如下。

 

 1.    背景

 有些Map/Reduce数据产出之后,对于value数量不足的记录,要求在数据端予以补全。在这里,我们要求每条记录中有10value,用逗号,“,”,进行分隔。

     对于补全之后的结果,是不是可以保证每条记录中有10value,我们需要进行验证。思路如下。

       a)         HDFS中导出数据为文本格式;

       b)         使用awksed进行文本的分析;

       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,其中有10value的记录数有1100253,占比99.8848%。这个结果是可以接受的。

当然我们这里的目的还是为了说明awksed的使用,下面是进一步的延伸。

 

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进行统计。我们在这里仅用来作为awksed学习的一个示例。

 

4.    参考资料

 AwkAWK 简明教程》

Sedsed 简明教程》

 

 

  • 大小: 29.6 KB
  • 大小: 24 KB
  • 大小: 152.2 KB
  • 大小: 93.1 KB
  • 大小: 130.2 KB
分享到:
评论

相关推荐

    AWK学习笔记.doc

    通过深入学习这些章节,你可以掌握AWK的基本概念和高级技巧,从而在数据处理任务中发挥出AWK的强大能力。无论你是数据分析新手还是经验丰富的开发者,理解并熟练运用AWK都能极大地提升你的工作效率。

    linux awk学习笔记

    `awk`的学习需要结合实际案例进行,通过编写和运行脚本来熟悉其用法和功能。 总结,`awk`是Linux文本处理的重要工具,其灵活性和强大的功能使其在数据分析、日志分析等领域有着广泛的应用。通过深入学习和实践,...

    awk脚本学习快速入门

    本资料包中的"awkѧϰ"和"awk学习"文件可能包含实战案例、练习题及解释,是学习awk的好资源。建议结合这些实例逐步实践,加深对awk的理解,提升文本处理技能。不过,请注意,如果资料存在质量问题,可以考虑寻找更新...

    awk学习笔记,从论坛整理而来

    `awk` 是一种强大的文本分析工具,常用于处理和解析结构化的文本文件,如日志文件、配置文件等。在Linux和Unix系统中,`awk` ...通过不断地实践和学习,你将能够有效地利用 `awk` 解决日常工作中遇到的文本处理问题。

    awk学习资料最近整理的资料

    在"awk学习资料最近整理的资料"这个压缩包中,你可以找到一系列关于awk的学习资源,帮助你掌握这一技能。以下是一些主要的awk知识点: 1. **基本语法**:awk的工作原理基于行处理,每一行被视为一个记录,每个记录...

    AWK语言学习资料--基础知识

    - 示例中提到的投诉数据问题,AWK可以用来处理换行符并转换数据格式以适应导入系统的要求。 - 当数据源存在不一致性,如字段个数不固定,AWK可以检查字段数量并进行填充或过滤,以满足导入数据库的需求。 6. **...

    awk入门级教材awk入门awk入门

    #### 十、示例代码解析 - **长度超过72个字符的行**: ```awk length > 72 ``` 打印长度超过72个字符的所有输入行。 - **具有偶数个字段的行**: ```awk NF % 2 == 0 ``` 打印具有偶数个字段的所有行。 - *...

    Linux AWK 学习资料

    Linux中的AWK是一种强大的文本分析工具,用于对文件或数据流进行模式匹配和处理。它在系统管理和数据分析中被广泛使用。AWK的工作原理是基于用户定义的规则(也称为模式)来处理输入数据,根据这些规则进行筛选、...

    linux下AWK学习笔记

    示例应用 例如,要找出一个CSV文件中价格大于100的项,可以使用以下命令: ```bash awk -F ',' '$3 > 100 {print $0}' sales.csv ``` 这里,`-F ','`指定了字段分隔符为逗号,`$3 > 100`是模式,表示匹配第三列值...

    awk手册,学习AWK一定要收藏

    学习AWK的最佳方式是从实践中学习。除了本文提供的基础指南外,还可以参考以下资源: 1. **官方文档**:访问GNU AWK的官方网站获取最新文档。 2. **在线教程**:互联网上有许多优秀的AWK教程,适合初学者和高级用户...

    Sed与Awk (中文版)

    在学习和使用awk时,了解不同版本的awk也十分重要。书中介绍了POSIX标准的awk,以及一些流行的免费版本如gawk和商业版本的awk。这些不同实现之间可能存在一些差异,了解这些差异有助于在不同的使用场景中选择和利用...

    awk学习笔记(简单易学)

    ### awk学习笔记精要 #### 1. awk简介 awk是一种功能强大的文本处理语言,主要用于在Linux/Unix环境中处理文本和数据。它能够从标准输入、文件或其它命令的输出中提取并处理数据,支持自定义函数和动态正则表达式...

    GAWK-Effective AWK Programming - GNU Awk编程经典

    接着,书籍转而解决如何使用awk解决问题,其中提到了awk函数库,以及一些实用的awk程序示例,这说明书籍不仅仅是理论的介绍,还包含了实际应用和案例研究。 在“Moving Beyond Standard awk with gawk”部分,作者...

    Effective awk Programming, 4th Edition[awk高效编程4版]

    《Effective awk Programming, 4th Edition》是一本深入讲解awk编程技术的专业书籍,旨在帮助读者提升在文本处理和...通过这本书的学习,你将能充分利用awk的强大功能,为日常的文本分析和数据操作带来显著的效率提升。

    GNU AWK 英文版使用手册

    本手册作为一份重要的AWK学习资源,对于想要精通AWK语言的程序员来说,具有非常高的参考价值。通过深入阅读和实践手册中的示例和技巧,开发者可以大幅度提升他们在文本处理和模式匹配方面的技能。

    awk实用程序源码.zip_awk源码_linux_linux awk 源码_makefile_实用程序

    这个压缩包`awk实用程序源码.zip`包含了`awk`的源码,这对于深入理解其工作原理和学习如何编写自己的`awk`程序非常有帮助。 首先,让我们来看看`makefile`。`makefile`是Linux中构建程序的关键文件,它定义了如何...

    linux环境下awk开发

    #### 六、AWK语法示例 AWK的基本语法结构由模式和动作组成。模式定义了哪些行将被处理,而动作则定义了如何处理这些行。 - **模式**: `{pattern}` 定义了需要匹配的文本特征。 - **动作**: `{action}` 在匹配成功...

    sed & awk 第二版 例程 源代码 源码 sed & awk sourcecode

    《sed与awk 第二版 例程 源代码...本书的例程和源代码提供了丰富的实践机会,是深入理解sed和awk不可多得的学习资源。因此,无论是初学者还是经验丰富的开发者,都应该充分利用这些资料,不断提升自己的文本处理技能。

Global site tag (gtag.js) - Google Analytics