美文网首页Shell我用 LinuxLinux学习之路
命令行工具:awk文本处理

命令行工具:awk文本处理

作者: 心智万花筒 | 来源:发表于2017-05-28 21:55 被阅读152次

awk

一个强大的工具,可以同时处理行和列,好多C语言内置函数可以集成进来,非常灵活。基本模式是awk 'BEGIN{print "start"} pattern {commands} END {print "end"} file',其中BEGIN和END可选,就是开始执行真正的循环之前和之后执行的操作。

简介

有几个特殊的变量:

  • NR:number of current row,当前行号;
  • NF:number of fields,总共有多少个字段,默认是按空格分字段的;
  • $0:当前行段内容;
  • $1:第一个字段的内容

执行逻辑是:

  • 执行BEGIN块里命令
  • 读取一行内容(文件或stdin),匹配模式,若匹配成功,执行commands;匹配不成功,不执行;如果没有模式,默认都执行;重复这一步
  • 执行END块里命令

下面还是以student.csv为例:

name gender score grade
David male 85 B
Michael female 90 A
Cammy male 88 A
Tom female 59 C

Cookbook

简单常见操作:

  • awk '{print $1}' student.csv:打印第一个字段,默认空格分割
  • awk '/Tom/ {print $2}' student.csv:若该行包含Tom,打印第二列,默认空格分割
  • awk -F ',' '{print $NF}' student.csv:打印最后一列,指定是按逗号分隔
  • awk '{s+=$3} END {print s}' student.csv:计算第三列的和,如果没有表头的话
  • awk 'BEGIN {getline; print $0} {s+=$3} END {print s}' student.csv:getline跳过第一行,尤其是CSV文件
  • awk 'END{print NR}' student.csv:统计有几行
计算一列和

awk -F"," 'BEGIN {getline} {s+=$3} END {print s}' student.csv结果算出score列和为322。

其中-F","告诉awk用逗号分隔;BEGIN里的get line告诉awk跳过第一行;后面每次循环加上第三列的值,结果就是求个sum。

计算某列最大值

awk -F"," 'BEGIN{getline} max < $3 {max = $3} END{print max}' student.csv得出结果90。

同样开始的时候,跳过第一行;max < $3是一个条件判断,如果遇到更大的值,将其赋给max,如果没有,继续;最后打印最大值。

awk -F"," 'BEGIN{getline} max < $3 {max = $3; maxline=$0} END{print maxline }' student.csv可以打印最大值这一行。

交换两列值

awk -F"," 'BEGIN{OFS=","} {tmp=$3; $3=$4; $4=tmp; print $0}' student.csv结果如下:

name gender grade score
David male B 85
Michael female A 90
Cammy male A 88
Tom female C 59

其中BEGIN模块里先指定Output Field Separator,默认的是空格,可以重新指定为逗号;后面建立一个临时变量,然后交换第三四列;打印交换后的行。

给加一个列id

awk 'BEGIN {getline; print "id," $0} {print NR-1 "," $0}' student.csv

id name gender score grade
1 David male 85 B
2 Michael female 90 A
3 Cammy male 88 A
4 Tom female 59 C

第一行的时候,直接加id即可;其他行,利用NR变量自动加,同时用变量$0保留原来行数据。

相关文章

  • note_17.3_awk

    GNU awk: 文本处理三工具:grep, sed, awk grep, egrep, fgrep:文本过滤工具...

  • 0x0A 数据琅琊棒,伪装者AWK

    摘要:AWK是命令行下文本处理非常实用的工具。这便是“一个分隔,两种结构,三段布局”的全部。awk是伪装成实用工具...

  • Linux命令

    AWK - 行文本处理工具 原理: 逐行处理文本数据语法: awk 'pattern + {action}'...

  • Awk 命令详解

    [TOC] 简介 我们常在命令行中使用awk命令提取转换文件文本内容,可以说,awk是命令行中文本处理的瑞士军刀,...

  • shell -- AWK&文本处理 浅析

    markdown 编辑,来写awk真是麻烦awk 入门:awk 是格式化文本处理最常用的工具,日常捞数据、切数据最...

  • Unix文本处理工具之awk

    Unix命令行下输入的命令是文本,输出也都是文本。因此,掌握Unix文本处理工具是很重要的一种能力。awk是Uni...

  • Linux上文本处理三剑客awk

    GNU awk:gawk 文本处理三工具:grep, sed, awkgrep, egrep, fgrep:文本过...

  • 5分钟入门AWK

    AWK是Linux上卓越的文本处理工具,它具有非常简单的语法结构,拥有强大的文本处理能力。AWK 是一种解释执行的...

  • awk

    awk的简介和功能 awk: Linux 文本处理三剑客:grep、sed和awk。其中grep是一种文本过滤工具...

  • 命令行工具:awk文本处理

    awk 原文链接 一个强大的工具,可以同时处理行和列,好多C语言内置函数可以集成进来,非常灵活。基本模式是awk ...

网友评论

    本文标题:命令行工具:awk文本处理

    本文链接:https://www.haomeiwen.com/subject/xwnhfxtx.html