awk 简介

awk是一个文本处理工具,通常用于处理数据并生成结果报告,

awk的命名是它的创始人 Alfred Aho、Peter Weinberger和Brian Kernighan 姓氏的首个字母组成的。

awk的工作模式

语法格式

第一种形式: 基于文件

awk 'BEGIN{}pattern{commands}END{}' file_name

  

第二种形式: 基于标准命令格式

standard output | awk 'BEGIN{}pattern{commands}END{}'

语法格式说明

awk的内置变量

内置变量对照表

    内置变量:
$0 打印行所有信息
$1~$n 打印行的第1到n个字段信息
NF Number Field 处理行的字段个数
NR Number Row 处理行的行号
FNR File Number Row 多文件处理时,每个文件单独记录行号
FS Field Separator 字段分隔符,不指定时默认以空格或tab键分割
RS Row Separator 行分隔符,不指定时以回车换行分割
OFS Output Filed Separator 输出字段分隔符
ORS Output Row Separator 输出行分隔符
FILENAME 处理文件的文件名
ARGC 命令行参数个数
ARGV 命令行参数数组

  

输出整行数据

awk '{print $0}' passwd

FS指定分隔符为 : 输出所有行第一个字段

awk 'BEGIN{FS=":"}{print $1}' passwd

默认以空格或者tab为分隔符

list

Hadoop Spark Flume
Java Python Scala
Allen Mike Meggie

  

以空格为分隔符, 输出第一个字段

awk 'BEGIN{FS=" "}{print $1}' list

NF 输出每一行的字段个数

awk '{print NF}' list

NR 输出行号,处理多个文件(list,passwd,/etc/fstab) 时行号累加

awk '{print NR}' list passwd /etc/fstab

  

FNR在处理两个文件以上时会单独计数

awk '{print FNR}' list /etc/fstab

  

list

Hadoop|Spark:Flume
Java|Python:Scala:Golang
Allen|Mike:Meggie

以  |  符号分隔列, 输出第二个字段  

以 : 符号分隔列

awk 'BEGIN{FS=":"}{print $2}' list

 

list

Hadoop|Spark|Flume--Java|Python|Scala|Golang--Allen|Mike|Meggie

  

RS 指定行分隔符: --

awk 'BEGIN{RS="--"}{print $0}' list

awk 'BEGIN{RS="--";FS="|"}{print $3}' list

ORS输出分隔符,以&连接各输出行

awk 'BEGIN{RS="--";FS="|";ORS="&"}{print $3}' list

字段默认分隔符是空格

awk 'BEGIN{RS="--";FS="|";ORS="&"}{print $1,$3}' list

OFS 指定字段分隔符为 :

awk 'BEGIN{RS="--";FS="|";ORS="&";OFS=":"}{print $1,$3}' list

FILENAME 文件名

awk '{print FILENAME}' list

list

Hadoop|Spark|Flume--Java|Python|Scala|Golang--Allen|Mike|Meggie
Test File
Line

输出3次文件名list,是因为没有输入匹配模式 awk默认是行处理,文本有3行,处理三次会有3次输出

awk '{print FILENAME}' list

  

ARGC命令行参数个数  awk 和 list 共链各个参数

awk '{print ARGC}' list

awk '{print ARGC}' list /etc/fstab  这样的话就是 3 个参数

NF表示字段个数,NF=7 $NF表示字段的个数一般来显示最后一个字段

awk 'BEGIN{FS=":"}{print $NF}' passwd

  

awk 格式化输出 printf

printf的格式说明符

格式化案例演示

printf默认没有分隔符

awk 'BEGIN{FS=":"}{printf $1}' passwd

加入换行,格式化输出

awk 'BEGIN{FS=":"}{printf "%s\n",$1}' passwd

  

使用占位符美化输出,默认是右对齐

awk 'BEGIN{FS=":"}{printf "%20s %20s\n",$1,$7}' /etc/passwd

- 减号是左对齐,+ 加号是右对齐

awk 'BEGIN{FS=":"}{printf "%-20s %-20s\n",$1,$7}' /etc/passwd

以字符串格式打印/etc/passwd中的第7个字段,以":"作为分隔符

awk 'BEGIN{FS=":"}{printf "%s\n",$7}' passwd

以10进制格式打印/etc/passwd中的第3个字段,以":"作为分隔符

awk 'BEGIN{FS=":"}{printf "%d\n",$3}' passwd

以浮点数格式打印/etc/passwd中的第3个字段,以":"作为分隔符

awk 'BEGIN{FS=":"}{printf "%0.2f\n",$3}' passwd

以16进制数格式打印/etc/passwd中的第3个字段,以":"作为分隔符

awk 'BEGIN{FS=":"}{printf "%x\n",$3}' passwd

以8进制数格式打印/etc/passwd中的第3个字段,以":"作为分隔符

awk 'BEGIN{FS=":"}{printf "%o\n",$3}' passwd

以科学计数法格式打印/etc/passwd中的第3个字段,以":"作为分隔符

awk 'BEGIN{FS=":"}{printf "%e\n",$3}' passwd

awk模式匹配的两种方法

awk  模式匹配格式对照表

正则匹配 RegExp

匹配/etc/passwd文件行中含有root字符串的所有行

awk 'BEGIN{FS=":"}/root/{print $0}' passwd

匹配/etc/passwd文件行中以nginx开头的所有行

awk '/^nginx/{print $0}' passwd

运算符匹配

  • < 小于
  • > 大于
  • <= 小于等于
  • >= 大于等于
  • == 等于
  • != 不等于
  • ~ 匹配正则表达式
  • !~ 不匹配正则表达式

以 : 为分隔符,匹配/etc/passwd文件中第3个字段小于50的所有行信息

awk 'BEGIN{FS=":"}$3<50{print $0}' passwd

以:为分隔符,匹配/etc/passwd文件中第3个字段大于50的所有行信息

awk 'BEGIN{FS=":"}$3>50{print $0}' passwd

以:为分隔符,匹配/etc/passwd文件中第7个字段为/bin/bash的所有行信息

awk 'BEGIN{FS=":"}$7=="/bin/bash"{print $0}' passwd

以:为分隔符,匹配/etc/passwd文件中第7个字段不为/bin/bash的所有行信息

awk 'BEGIN{FS=":"}$7!="/bin/bash"{print $0}' passwd

以:为分隔符,匹配/etc/passwd文件中第3个字段包含3个数字以上的所有行信息

awk 'BEGIN{FS=":"}$3 ~ /[0-9]{3,}/{print $0}' passwd

布尔运算符匹配

  • || 或
  • && 与
  • ! 非

以 : 为分隔符,匹配/etc/passwd文件中包含ftp或mail的所有行信息

awk 'BEGIN{FS=":"}$1=="ftp" || $1=="mail"{print $0}' passwd

以:为分隔符,匹配/etc/passwd文件中第3个字段小于50并且第4个字段大于50的所有行信息

awk 'BEGIN{FS=":"}$3<50 && $4>50{print $0}' passwd

匹配包含 nginx 的行

awk 'BEGIN{FS=":"}/^nginx/{print $0}' passwd

关系运算符,uid 等于1的行

awk 'BEGIN{FS=":"}$3==1{print $0}' passwd

  

匹配uid(数字)为3位及以上的行

awk 'BEGIN{FS=":"}$3~/[0-9]{3,}/{print $0}' passwd

  

匹配不包含/sbin/nologin 的行

awk 'BEGIN{FS=":"}$0!~/\/sbin\/nologin/{print $0}' passwd

找出 uid 小于50,且bash为 /bin/bash 的行

awk 'BEGIN{FS=":"}$3<50 && $7~/\/bin\/bash/ {print $0}' passwd

  

  

  

awk 概述及常用方法总结的更多相关文章

  1. shell编程系列14--文本处理三剑客之awk的概述及常用方法总结

    shell编程系列14--文本处理三剑客之awk的概述及常用方法总结 awk是一个文本处理工具,通常用于处理数据并生成结果报告 awk的命名是它的创始人 Alfred Aho.Peter Weinbe ...

  2. sed & awk 概述

    概述 一般情况下,从grep到sed和awk的学习过程是很自然的.sed和awk是一般用户.程序员和系统管理员们处理文本文件的有力工具. sed的名字来源于其功能,它是个字符流编辑器(stream e ...

  3. Java Collection集合概述及其常用方法

    Collection集合概述 Java数组的长度是固定的,为了使程序能够方便地存储和操作数目不固定的一组数据,JDK类库提供了Java集合 与数组不同的是,集合中不能存放基本类型数据,而只能存放对象的 ...

  4. awk 手册--【转载】

    1. 前言 有关本手册 : 这是一本awk学习指引,  其重点着重于 : l         awk 适于解决哪些问题 ? l         awk 常见的解题模式为何 ? 为使读者快速掌握awk解 ...

  5. awk中文手册

    1. 前言 有关本手册 : 这是一本awk学习指引, 其重点着重于 : l        awk 适于解决哪些问题 ? l        awk 常见的解题模式为何 ? 为使读者快速掌握awk解题的模 ...

  6. 见过的最好AWK手册

    原文: http://linuxfire.com.cn/~lily/awk.html 简体中文版由bones7456 (http://li2z.cn)整理. 原文:应该是 http://phi.sin ...

  7. 【译】 AWK教程指南

    前面的话: 这几天写了一个程序,在同一个目录里生成了很多文件,需要统计其中部分文件的总大小,发现经常用到的ls.du等命令都无济于事,我甚至都想到了最笨的方法,写一个脚本:mkdir一个新目录,把要统 ...

  8. awk 手册

    1. 前言 有关本手册 : 这是一本awk学习指引, 其重点着重于 : l        awk 适于解决哪些问题 ? l        awk 常见的解题模式为何 ? 为使读者快速掌握awk解题的模 ...

  9. [转]awk使用手册

    awk 手册 简体中文版由bones7456 (bones7456@gmail.com)整理. 原文:应该是 http://phi.sinica.edu.tw/aspac/reports/94/940 ...

随机推荐

  1. win7、win10系统电脑开机后小键盘灯不亮怎么办?

    摘自:https://www.pconline.com.cn/win10/1113/11136072.html win7.win10系统 电脑开机后小键盘灯不亮怎么办?这是不少用户最近都在反馈的问题. ...

  2. OHEM(online hard example mining)

    最早由RGB在论文<Training Region-based Object Detectors with Online Hard Example Mining>中提出,用于fast-rc ...

  3. Go micro 开发微服务步骤

    1.写 proto文件,定义接口和服务 2.实现 接口,注册 handle 3.调用服务:直接用rpc 客户端调用,或者用 api http web等调用 api http web 等服务可以对客户端 ...

  4. Data - 深入浅出学统计 - 上篇

    本文是已读书籍的内容摘要,少部分有轻微改动,但不影响原文表达. :以漫画形式来讲解最基本的统计概念和方法. ISBN: 9787121299636 https://book.douban.com/su ...

  5. mysql数据库表的查询

    一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...

  6. hadoop 集群调优实践总结

    调优概述# 几乎在很多场景,MapRdeuce或者说分布式架构,都会在IO受限,硬盘或者网络读取数据遇到瓶颈.处理数据瓶颈CPU受限.大量的硬盘读写数据是海量数据分析常见情况. IO受限例子: 索引 ...

  7. js判断是Android还是iOS

    var u = navigator.userAgent, app = navigator.appVersion; var isAndroid = u.indexOf('Android') > - ...

  8. Prometheus入门到放弃(1)之Prometheus安装部署

    规划: IP 角色 版本 10.10.0.13 prometheus-server 2.10 10.10.0.11 node_exporter 0.18.1 10.10.0.12 node_expor ...

  9. MAC帧封装

    通过控制台输入一段文字,输出MAC帧的2进制和16进制的字符串,主要是求FCS.这里只考虑单帧的情况,即只考虑输入数据在1字节~1500字节之间的情况,对于更长的数据暂不考虑. 1.MAC帧基本格式 ...

  10. 【HC89S003F4开发板】 1环境搭建

    HC89S003F4开发板环境搭建 一.概述 芯圣电子做活动,一个开发板只用一块钱,买过来玩玩.︿( ̄︶ ̄)︿ 全套资料可以在论坛或qq群里下载.总之先安装个环境先. 二.安装Keil C51 作为增 ...