简介

awk是一种处理文本文件的语言,是一个强大的文本编辑工具。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分在进行各种分析处理。

gawk

用法:gawk [options] 'PATTERN{ACTION STATEMENTS}' FILE...

gawk [options]'program'FILE...

program : PATTERN{ACTION STATEMENTS}

选项(options)

-f file :指定awk脚本文件

-F:输入数据时的字段分割符

-v:var=value:自定义变量

分割符、域和记录

awk执行时,由分隔符分隔的字段(域)标记$1,$2..$n称为域标识。

$0为所有域, 注意:和shell中变量$符含义不同

文件的每一行称为记录

省略action,则默认执行 print $0 的操作

示例

从passwd文件中取出user,uid,shell

# awk -F: '{print $1,$3,$7}' /etc/passwd

PATTERN

1)空模式,匹配每一行

2)/正则表达式/:仅处理被模式匹配到的行

3)关系表示式(条件表示式):布尔值类型,结果为真(非0或非空字符串)则处理;结果为假(0或空字符串)则不处理

4)地址定界;支持PATTERN和条件表达式;不支持数字直接定界

5)BEGIN/END模式;BEGIN{}:仅在文本处理之前执行;END{}:仅在文本处理完成之后执

ACTIONS

表达式

三目表达式:selector?if-true-expression:if-false-expression

如果selector为真,则执行if-true-expression;如果selector为假,则执行if-false-expression。

控制语句

1)if-else 语法:if(condition) statement [else statement]

2)while 语法:while(condition) statement 条件真进入循环,条件假退出循环

3)do-while 语法:do statement while(condittion) 先执行一次do,然后判断是否进入循环

4)for 语法:for(variable assignment; condition; iteration process){for-body}

*特殊用法:能够遍历数组中的元素,for(var in array) {for-body}

5)switch 语法:switch(expression) {case VALUE1 or /PEGEXP/: statement; case VALUE2 or /PEGEXP2/: statement; ... ;default: statement}

6)next:控制awk的内生循环,提前结束对本行的处理直接进入下一行

7)continue | break | exit:退出循环,和shell中用法相同

组合语句

组合语句需要将多条语句放到大括号内

输入语句

输出语句

print item1, item2, ... 输出命令

1)逗号为分隔符

2)输出的各item可以是字符串,也可是数值当前记录字段、变量或awk的表达式

3)如果省略item,则相当于print $0

printf FORMAT, item1, item2, ...:格式化输出命令

1)FORMAT必须要给出

2)不会自动换行,需要显示给出换行控制符,\n

3)FORMAT中需要分别为后面的每个item指定一个格式化符号

4)格式符

  • %c:显示字符的ASCII码;
  • %d,%i:显示十进制整数;
  • %e,%E:科学计数法数值显示;
  • %f:显示为浮点数;
  • %g,%G:以科学技术法或浮点数形式显示数值;
  • %s:显示字符串;
  • %u:无符号整数;
  • %%:显示%自身

5)修饰符

  • M[.N]:M控制数组显示的宽度,N控制小数点的精度
  • -:左对齐显示,默认右对齐
  • +:显示数值的符号

变量

内建变量

FS:输入字段分隔符,默认为空白字符

示例:从passwd文件中取出user,uuid,shell

#awk -v FS=":" '{print $1,$3,$7}' /etc/passwd

OFS:输出字段分隔符,默认为空白字符

示例:从passwd文件中取出user,uuid,shell并以“:”为分隔符输出

#awk -v FS=":" -v OFS":"  '{print $1,$3,$7}' /etc/passwd

RS:输入记录分隔符

示例:以空格为换行符打印

# awk -v FS" "  '{print}' /etc/passd

ORS:输出记录分隔符

NF:字段数量;{print $NF}:表示最后字段值

示例:输出每行有多少个字节

# awk '{print NF}' /etc/passwd

NR:行数,对不同文件行数累加计数

示例:输出文件行号(有多少行)

# awk '{print NR}' /etc/passwd 

FNR:行数,对不同文件行数分别计数

示例:两个个文件分别打印行号

# awk -F: '{print FNR}' /etc/passwd /etc/fstab

FILENAME:显示当前文件名

ARGC:命令行参数个数

示例:打印命令行有几个参数

# awk -F: 'BEGIN{print ARGC}' /etc/passwd /etc/fstab

ARGV:数组,保存的是命令行中给定的各参数,使用ARGV[#]引用

示例:打印命令行第1个参数

# awk -F: 'BEGIN{print ARGV[1]}' /etc/passwd /etc/fstab

再次说明, awk 对输入文件中的每一行都执行这个脚本。

自定义变量

1)-v var=value 在选项中定义

示例:自定义变量,打印hello world

# awk -v var='hello world!' 'BEGIN{print var}'

2)在program中直接定义

数组

关联数组:array[index-expression]

index-expression:

1)可以使用任意字符,字符串要使用双引号;

2)如果某数组元素事先不存在,在引用时awk会自动创建此元素并将其值初始化为“空串”;若要判断数组中是否存在某元素,需要使用"index in array"格式进行;

delete array[index]:删除数组中的单个元素

delete array:删除整个数组

函数

内置函数

srand():生成随机数种子

rand():返回1和0之间的随机数(小数)

int():对数取整

length():返回指定字符串的长度

sub(r, s, [t]):以r表示的模式来查找t所表示的字符串所匹配的内容,并将其第一次出现的替换为s所指定的内容

gsub(r, s, [t]):以r表示的模式来查找t所表示的字符串所匹配的内容,并将其所有出现的替换为s所指定的内容

split(s, a, [r]):以r为分隔符切割字符s,并将切割后的结果保存至a所表示的数组中

自定义函数

function name ( parameter, parameter, ... ) {
statements
return expression
}

awk中的操作符

算术操作符:

  • +  -  *  /  ^  %
  • -x:整数转换为负数
  • +x:字符串转换为数值

赋值操作符:

  • =  +=   -=   /=   %=   ^=   ++   --

比较操作符:

  • >  <  >=  <=  !=  ==

模式匹配符:

  • ~:左侧的字符串是否能够被右侧的模式匹配
  • !~:左侧的字符串是否能够被右侧的模式不匹配

逻辑操作符:

  • && (并且)
  • ||    (或者)
  • !       (否)

文本处理三剑客之awk的更多相关文章

  1. 文本处理三剑客之 awk

    GAWK:报告生成器,格式化文本输出 awk [options] ‘program’ var=value file… awk [options] -f programfile var=value fi ...

  2. 文本处理三剑客之AWK的用法

    1.awk命令简介: awk是一种可以处理数据.产生格式化报表的语言,功能十分强大. awk的工作方式是读取数据,将每一行数据视为一条记录(record)每笔记录以字段分隔符分成若干字段,然后输出各个 ...

  3. 文本处理三剑客之awk(No.1)

    示例1:只查看test.txt文件内的第3到第7行的内容 awk '{if(NR>=3 && NR<=7) print $0}' test.txt #其中的$0是输出整个行 ...

  4. shell脚本之正则表达和文本处理(文本处理三剑客:1、grep 2、sed 3、awk)

    文本处理三剑客:1.grep  2.sed  3.awk 一.grep:(过滤) grep的使用,主要的参数有: -n  :显示行号:-o  :只显示匹配的内容-q  :静默模式,没有任何输出,得用e ...

  5. Linux实战教学笔记18:linux三剑客之awk精讲

    Linux三剑客之awk精讲(基础与进阶) 标签(空格分隔): Linux实战教学笔记-陈思齐 快捷跳转目录: * 第1章:awk基础入门 * 1.1:awk简介 * 1.2:学完awk你可以掌握: ...

  6. 文本处理三剑客之 Sed ——一般编辑命令

    sed简介 sed (stream editor for filtering and transforming text) 是Linux上的文本处理三剑客之一,另外两个是grep和awk. sed又称 ...

  7. 文本处理三剑客之 grep

    grep简介 grep(Global search REgular expression and Print out the line)是Linux上的文本处理三剑客之一,另外两个是sed和awk. ...

  8. (转)不看绝对后悔的Linux三剑客之awk实战精讲

    原文:http://blog.51cto.com/hujiangtao/1923930 一.Linux三剑客之awk命令精讲 第1章 awk基础入门 1.1 awk简介 awk不仅仅时linux系统中 ...

  9. Linux文本处理三剑客之grep及正则表达式详解

    Linux文本处理三剑客之grep及正则表达式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux文本处理三剑客概述 grep: 全称:"Global se ...

随机推荐

  1. JavaScript知识点:分支结构(if、switch)+算法例题

    if-else分支 1.if条件应该是boolean类型的值或表达式 2.如果条件不是Boolean,会进行自动转换 以下几种情况会默认转换为 false: if(0).if(0.0) if(NaN) ...

  2. OpenStack kilo版(1) 部署环境

    硬件 VMware workstation虚拟机 Ubuntu14.04操作系统 虚拟机网络规划 管理网络: eth0, 桥接模式 10.0.0.0/24 外部网络: eth1, nat模式(需要关闭 ...

  3. ResizeObserver - 元素resize监听API ResizeObserver

    Motivation 响应式网站/Web应用程序 根据视口大小调整内容展示方式.这通常通过CSS和media查询来完成.当CSS表现不好我们会使用Javascript. 比如document.addE ...

  4. Memory Network

    转自:https://www.jianshu.com/p/e5f2b20d95ff,感谢分享! 基础Memory-network 传统的RNN/LSTM等模型的隐藏状态或者Attention机制的记忆 ...

  5. 三星Q470c Logo界面无限掉电重启,变砖后的挽救过程

    背景 三星笔记本的部分型号如:NP530 Q470等 安装win8后再次重装系统(我弄了个Ubuntu18)会导致无法进入BIOS菜单页面的问题.启动显示logo页面后,能够听到明显啪的一声(硬盘掉电 ...

  6. 页面Header自适应屏幕

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  7. 字符串的新方法——includes() padStart() padEnd()

    ES6为字符串提供了一个新方法,叫做String.prototype.includes('要包含的字符串'),如果包含,则返回字符串,否则返回false 使用ES6中的字符串新方法String.pro ...

  8. linux如何查看所有的用户和组信息

    [步骤一]cat /etc/passwd cat /etc/passwd查看所有的用户信息,详情如下图 [步骤二]cat /etc/passwd|grep 用户名 cat /etc/passwd|gr ...

  9. MGR测试及搭建

    一.部署规划:本次布署使用单机多实例进行basedir: /usr/local/mysql端口号 数据目录 group_repplication通信端口3306 /data/mysql/mysql_3 ...

  10. Vue 组件的通信

    vue不得不了解的就是组件间的数据通信(暂且不谈vuex插件). 通信方式根据组件之间的关系有不同之处. 组件关系有下面三种:父-->子.子-->父.非父子 1.父-->子 父向子传 ...