awk:是一种很方便的数据处理的编程语言,用于数据分析并生成报告

基本格式:

awk [options] ‘program’ file
awk 可选参数 ‘可执行脚本代码’ 文件

先举个?,NoZuoNoDie组合练习生的文件:NoZuoNoDie.csv

name practiceTtime ranking
he 5 3
wei 12 5
bai 10 2
sa 4 4
jia 7 1

现在想找出排名前三的练习生

解释下:

  1. 第一句是输出这个文件的所有内容,类似于cat filename。awk执行print $0这条命令:输出$0, $0代表当前行,所以把所有行都输出了

  2. 第二句是输出前三名的命令啦

    • 因为平时用CSV文件比较多,就用CSV文件举例,因此需要可选参数-F 指定分隔符为逗号,默认的分隔符为空格和制表符
    • $符号后边的数字代表第几行,$3 <= 3,第三行小于等于4
    • {print $1} 输出第一行,也就是姓名
    • 最后是文件名

接下来正式开始,以下都是我实践后,直接上截图,然后解释每句,语句不能粘贴,大家一定要多动手,自己手动敲一遍,才会更深刻哦(才不会说是因为我懒(ーー゛)

打印

1. 打印每一行

  1. awk ‘{print}’ NoZuoNoDie.csv
    将所有的输入打印到标准输出
  2. awk ‘{print $0}’ NoZuoNoDie.csv
    $0代表一整行,所以输出一整行

2.打印某些字段

截图按照顺序为1、2、3

  1. 第1个输出文件的全部内容,
  2. 2要输出第1、2行,但因为默认分隔符是空格、制表符,所以只有一行,第二行是空,
  3. 3呃,和2一模一样,省略
  4. 4指定了分隔符,输出第1、2行,看起来好乱,1、2行之间加个制表符,看起来会很好
  5. 所以5,在{print $1 “\t” $2}第1、2行输出的中间加入了制表符\t,要用双引号哦
  • 纠正个问题,在输出第一行第二行之间加上逗号,如下图,会自动填充看起来应该是空格,但是加制表符看起来更好看啦

3. NF

  • NF是awk的內建变量,计算当前输入行的字段数量
  1. 第一行输出了文件行数,1输出第1行内容,1输出第1行内容,1输出第1行内容,NF输出第三行内容,这个文件有3行,此时NF值为3,所以$NF输出第三行
  2. 第二个例子依次输出行数,第一行内容,第三行内容,第二行内容

4. 计算和打印

  1. 输出全部内容,再输出第2行和第三行相乘的值
  2. 看着不好看,加个制表符看看,不好看pass
  3. 同1
  4. NR代表行号,输出行号,全部内容,和$2 * $3,看起来好一点
  5. 只输出行号,name行,$2*$3
  6. 为了更好看,可以任意拼接字符串,如6、7,注意:‘s的引号,需要用反斜杠哦

5. 精美的输出

  • print用于简单快速的输出,printf可以输出任何种类
  1. %s代表第一个值以字符串形式打印,%.2f第二个值按照数值格式打印,且带2位小数。
  2. 末尾的\n是换行,printf不会自动换行,需要自己加,第二个例子,不加换行的效果
  • 其他:

    • %-8s左对齐输出,占用8个字符
    • %5.2f,以带有2位小数点的数值格式打印,数字至少占用6个字符宽度
    • 排序 awk -F ',' '{printf "%s, %s\n", $3, $1}' NoZuoNoDie.csv | sort -n

6. 比较、判断

  • 大于>、小于<、等于==、和&&、或||、非 !

  • 验证

  • BEGIN、END

7. 计算

8. 內建函数

length计算字符个数

awk -F ',' '{print $1, length($1) }' NoZuoNoDie.csv
out:   name 4he 2wei 3bai 3sa 2jia 3

(以下偷懒了,实在是太晚啦,有空补==。。。

9. 流程控制语句

  1. if else

    $2 > 6 { n = n + 1; pay = pay + $2 * $3 }END    { if (n > 0)print n, "employees, total pay is", pay,"average pay is", pay/nelseprint "no employees are paid more than $6/hour"
    }
    
  2. while
    { i=1
    while (i <= $3) {printf("\t%.2f\n", $1 * (1 + $2) ^ i)
    i=i+1 }
    }
    
  3. for
    { for(i=1;i<=$3;i=i+1) printf("\t%.2f\n", $1 * (1 + $2) ^ i)
    }
    

10. 数组

{ line[NR] = $0 }  # remember each input lineEND { i = NR           # print lines in reverse orderwhile (i > 0) {print line[i]
i=i-1 }
}

11. 其他

  1. 输入行的总行数
    END { print NR }
  2. 打印第 10 行
    NR == 10
  3. 打印每一个输入行的最后一个字段 { print $NF }
  4. 打印最后一行的最后一个字段
    { field = $NF }
    END { print field }
  5. 打印字段数多于 4 个的输入行 NF > 4
  6. 打印最后一个字段值大于 4 的输入行 $NF > 4
  7. 打印所有输入行的字段数的总和 { nf = nf + NF }
    END { print nf } 8. 打印包含 Beth 的行的数量
    /Beth/ { nlines = nlines + 1 }
    END { print nlines }
  8. 打印具有最大值的第一个字段, 以及包含它的行 (假设 $1 总是 正的) $1 > max { max = $1; maxline = $0 }
    END { print max, maxline }
  9. 打印至少包含一个字段的行 NF > 0
  10. 打印长度超过 80 个字符的行 length($0) > 80
  11. 在每一行的前面加上它的字段数 { print NF, $0 }
  12. 打印每一行的第 1 与第 2 个字段, 但顺序相反 { print $2, $1 }
  13. 交换每一行的第 1 与第 2 个字段, 并打印该行
    { temp = $1; $1 = $2; $2 = temp; print }
  14. 将每一行的第一个字段用行号代替 { $1 = NR; print }
  15. 打印删除了第 2 个字段后的行
    { $2 = “”; print }
  16. 将每一行的字段按逆序打印
    { for (i = NF; i > 0; i = i - 1) printf("%s “, $i)
    printf(”\n")
    }
  17. 打印每一行的所有字段值之和
    { sum = 0
    for (i = 1; i <= NF; i = i + 1) sum = sum + $i
    print sum
    }
  18. 将所有行的所有字段值累加起来
    { for (i = 1; i <= NF; i = i + 1) sum = sum + $i }
    END { print sum }
  19. 将每一行的每一个字段用它的绝对值替换
    { for (i = 1; i <= NF; i = i + 1) if ($i < 0) i=−i = -i=−i
    print
    }

文本分析工具:awk相关推荐

  1. linux文本分析工具awk解读

    awk是一个强大的文本分析工具,相对于grep的查找.sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.awk把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. ...

  2. 2019-8-20 [Linux] 6.Shell的基本操作 查看 改变 列出 阅读开头/结尾 循环查看 阅读工具less 查找文件内容 文本分析工具AWK 文本编辑工具SED文件find 帮助man

    文章目录 6.linuxShell的基本操作 6.1 查看目录和文件 6.1.1 显示当前目录:pwd 6.1.2 改变目录:cd 6.1.3 列出目录内容:ls 1) 查看列表信息 以及详细信息 2 ...

  3. 【Linux学习】强大的文本分析工具AWK

    之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符. 调用AWK: 1.命令行 ...

  4. awk文本分析工具用法

    文本分析工具 awk awkawk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将 ...

  5. linux基础--awk文本分析工具详解

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  6. Linux命令:文本处理工具awk详解

    awk命令简介: awk是一个强大的文本分析工具,通常,awk是以文件的每一行,为处理单位的.awk每接收文件的一行,然后执行相应的命令,来处理文本.  1.命令格式: awk 'pattern {a ...

  7. linux文本分析利器awk

    转 快速理解linux文本分析利器awk 原文链接 杜亦舒 性能与架构 awk是什么 如果工作中需要操作linux比较多,那么awk是非常值得学习的 awk是一个极其强大的文本分析工具,把文件逐行的读 ...

  8. shell编程之文本处理工具awk

    shell编程之文本处理工具awk 文章目录 shell编程之文本处理工具awk 一.awk介绍 1. awk概述 2. awk能干啥? 二.awk使用方式 1. ==命令行模式使用== ㈠ 语法结构 ...

  9. 文本分析工具 数据科学_数据科学工具

    文本分析工具 数据科学 The Data Scientist is the "Sexiest job of 21 Century", by Harvard Business Rev ...

  10. shell mysql awk_今日推荐:shell 三剑客之文本处理工具awk

    背景 awk 是一个文本处理工具,通常用于处理数据并生成结果报告. awk 的命名是它的创始人 Alfred Aho.Peter Weinberger 和 Brian Kernighan 姓氏的首个字 ...

最新文章

  1. 无线网***工具进攻方法及防范技巧
  2. 数据结构与算法之选择排序图文详解及代码 (C++实现)
  3. PythonOpenCV--Rtrees随机森林
  4. VC 为静态控件添加事件
  5. SAP CRM Opportunity订单的文档流Document Flow的一些变体variant
  6. Java中MySQL事务处理举例
  7. [渝粤教育] 广东-国家-开放大学 10763k2_客户服务管理_21秋考试
  8. 2016 CCF大数据与计算智能大赛——活动报名表
  9. 深度学习(四十七)DSD正则化训练方法
  10. VS2012程序打包部署详解
  11. linux下qt制作日历,课内资源
  12. activemq 重启后java程序_ActiveMQ持久化机制代码实例
  13. C#—接口和抽象类的区别?
  14. Android4.4深入浅出之SurfaceFlinger总体结构
  15. python openstackclient_在Linux系统上安装和配置OpenStack Client(客户端)的方法
  16. php和java的语法区别吗_php语法同java语法的基本区别(实例项目需求,php才能熟)...
  17. ORL 人脸库 BP神经网络人脸识别
  18. Unity在NGUI中默认动态字体Arial字体显示不完整解决方案
  19. Flak-SQLAlcemy数据增删改查
  20. 黑马程序员前端实战项目---PC端品优购(下)

热门文章

  1. ClownFish 使用说明
  2. python做个后端系统_Python做后端开发的优势
  3. 王笑京:智能交通陷入缺乏创新、发展乏力的困境 | 对此我们这样认为
  4. PCIe系列第八讲、MSI和MSI-X中断机制
  5. JAVA学习第八周总结
  6. 百年中国咖啡史,讲通了一个奶茶故事
  7. python建立sqlite数据库_python sqlite3 创建数据库
  8. oracle补丁下载记
  9. 【MySQL】17-超详细的MySQL聚合函数总结
  10. 通过Request获取客户端的真实IP