awk 概述及常用方法总结
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 概述及常用方法总结的更多相关文章
- shell编程系列14--文本处理三剑客之awk的概述及常用方法总结
shell编程系列14--文本处理三剑客之awk的概述及常用方法总结 awk是一个文本处理工具,通常用于处理数据并生成结果报告 awk的命名是它的创始人 Alfred Aho.Peter Weinbe ...
- sed & awk 概述
概述 一般情况下,从grep到sed和awk的学习过程是很自然的.sed和awk是一般用户.程序员和系统管理员们处理文本文件的有力工具. sed的名字来源于其功能,它是个字符流编辑器(stream e ...
- Java Collection集合概述及其常用方法
Collection集合概述 Java数组的长度是固定的,为了使程序能够方便地存储和操作数目不固定的一组数据,JDK类库提供了Java集合 与数组不同的是,集合中不能存放基本类型数据,而只能存放对象的 ...
- awk 手册--【转载】
1. 前言 有关本手册 : 这是一本awk学习指引, 其重点着重于 : l awk 适于解决哪些问题 ? l awk 常见的解题模式为何 ? 为使读者快速掌握awk解 ...
- awk中文手册
1. 前言 有关本手册 : 这是一本awk学习指引, 其重点着重于 : l awk 适于解决哪些问题 ? l awk 常见的解题模式为何 ? 为使读者快速掌握awk解题的模 ...
- 见过的最好AWK手册
原文: http://linuxfire.com.cn/~lily/awk.html 简体中文版由bones7456 (http://li2z.cn)整理. 原文:应该是 http://phi.sin ...
- 【译】 AWK教程指南
前面的话: 这几天写了一个程序,在同一个目录里生成了很多文件,需要统计其中部分文件的总大小,发现经常用到的ls.du等命令都无济于事,我甚至都想到了最笨的方法,写一个脚本:mkdir一个新目录,把要统 ...
- awk 手册
1. 前言 有关本手册 : 这是一本awk学习指引, 其重点着重于 : l awk 适于解决哪些问题 ? l awk 常见的解题模式为何 ? 为使读者快速掌握awk解题的模 ...
- [转]awk使用手册
awk 手册 简体中文版由bones7456 (bones7456@gmail.com)整理. 原文:应该是 http://phi.sinica.edu.tw/aspac/reports/94/940 ...
随机推荐
- 原生JavaScript常用本地浏览器存储方法二(cookie)
JavsScript Cookie概述 cookie是浏览器提供的一种机制,它将document对象的cookie属性提供给JavaScript.可以由JavaScript对其进行控制,而并不是Jav ...
- Nginx日志挂载目录为nfs文件服务器时开机无法自启动的问题解决
为了方便收集查看日志把nginx日志输出至nfs文件服务器,nfs文件服务器使用autofs自动挂载,nginx和autofs都使用systemctl设置了开机自启动. 但是在重启主机的时候nginx ...
- mac 下mongo的启动和关闭以及启动问题解决
原文地址:https://www.cnblogs.com/leinov/p/7341139.html mac 下mongo的启动和关闭以及启动问题解决 mongo的安装在这:http://www.cn ...
- 高级UI-SVG
栅格图可以实现图片的清晰显示,但这也意味着如果要在各种设备上使用栅格图,那么在使用的时候就会产生为了适配各种尺寸的设备而增加大量不同规格的栅格图,这也直接导致了资源文件体积的增大,矢量图就不存在这个问 ...
- Linux中执行 .sh 的方法
linux下执行.sh文件的方法 .sh文件就是文本文件,如果要执行,需要使用chmod a+x xxx.sh来给可执行权限. 是bash脚本么 可以用touch test.sh #创建test.sh ...
- 批处理快速合并多分Excel文件并将指定列的数据去重复
1.批处理快速合并多个excel文件方法: 新建一个.txt文本文件,就命名为合并.txt吧. 而后开启文件,复制以下代码到文件中: @echo off E: cd xls dir copy *.cs ...
- {"aa":null} 如何能转化为 {"aa":{}}
一个同事问的一个功能需求:{"aa":null} 如何能转化为 {"aa":{}}因为需求暂时不明确,暂时先完成这样的转换.使用的是FastJson1.2.7 ...
- kafka原理分析
#kafka为什么有高吞吐量 1 由于接收数据时可以设置request.required.acks参数,一般设定为1或者0,即生产者发送消息0代表不关心kafka是否接收成功,也就是关闭ack:1代表 ...
- DateTimeFormatter 的操作与使用 -- 通俗易懂
在上一章我们讲解了LocalDate.LocalTime.LocalDateTime.Instant的操作与使用,下面讲解它们之间是如何进行格式化 DateTimeFormatter这个类它只提供了时 ...
- Gulp-构建工具 相关内容整理
Gulp- 简介 Automate and enhance your workflow | 用自动化构建工具增强你的工作流程 Gulp 是什么? gulp是前端开发过程中一种基于流的代码构建工具,是自 ...