shell编程系列14--文本处理三剑客之awk的概述及常用方法总结
shell编程系列14--文本处理三剑客之awk的概述及常用方法总结 awk是一个文本处理工具,通常用于处理数据并生成结果报告
awk的命名是它的创始人 Alfred Aho、Peter Weinberger和Brian Kernighan 姓氏的首个字母组成的 awk的工作模式
语法格式 第一种形式: awk 'BEGIN{}pattern{commands}END{}' file_name BEGIN在匹配之前就执行的操作,pattern{commands}是对每一行的操作,END是匹配完后的操作 第二种形式: standard output | awk 'BEGIN{}pattern{commands}END{}' 语法格式说明
语法格式 说明
BEGIN{} 正式处理数据之前执行
pattern 匹配模式
{commands} 处理命令,可能多行
END{} 处理完所有匹配数据后执行 awk的内置变量 内置变量对照表(上) 内置变量 含义
$ 整行内容
$-$n 当前行的第1-n个字段
NF 当前行的字段个数,也就是多少列
NR 当前的行号,从1开始计数
FNR 多文件处理时,每个文件行号单独计数,都是从0开始
FS 输入字段分隔符。不指定默认以空格或tab键分割
RS 输入行分隔符。默认回车换行
OFS 输出字段分隔符。默认为空格
ORS 输出行分隔符。默认为回车换行
内置变量对照表(下) 内置变量 含义
FILENAME 当前输入的文件名字
ARGC 命令行参数个数
ARGV 命令行参数数组
总结:
内置变量:
$ 打印行所有信息
$~$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 命令行参数数组 # 输出整行数据 [root@localhost shell]# awk '{print $0}' passwd
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
ajie:x:::ajie:/home/ajie:/bin/bash
chrony:x::::/var/lib/chrony:/sbin/nologin
deploy:x::::/home/deploy:/bin/bash
nginx:x:::Nginx web server:/var/lib/nginx:/sbin/nologin # FS指定分隔符
[root@localhost shell]# awk 'BEGIN{FS=":"}{print $1}' passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
operator
games
ftp
nobody
systemd-network
dbus
polkitd
sshd
postfix
ajie
chrony
deploy
nginx # 默认以空格或者tab为分隔符
[root@localhost shell]# cat list
Hadoop Spark Flume
Java Python Scala
Allen Mike Meggie
[root@localhost shell]# awk '{print $1}' list
Hadoop
Java
Allen
[root@localhost shell]# awk 'BEGIN{FS=" "}{print $1}' list
Hadoop
Java
Allen # NF 输出每一行的字段个数
[root@localhost shell]# cat list
Hadoop Spark Flume
Java Python Scala Golang
Allen Mike Meggie
[root@localhost shell]# awk '{print NF}' list # NR 行号,处理多个文件(list,passwd,/etc/fstab)时行号累加
[root@localhost shell]# awk '{print NR}' list passwd /etc/fstab # FNR在处理两个文件以上时会单独计数
[root@localhost shell]# awk '{print FNR}' list passwd /etc/fstab [root@localhost shell]# cat list
Hadoop|Spark:Flume
Java|Python:Scala:Golang
Allen|Mike:Meggie # 以 | 符号分隔列
[root@localhost shell]# awk 'BEGIN{FS="|"}{print $2}' list
Spark:Flume
Python:Scala:Golang
Mike:Meggie
# 以 : 符号分隔列
[root@localhost shell]# awk 'BEGIN{FS=":"}{print $2}' list
Flume
Scala
Meggie # RS 指定行分隔符: --
[root@localhost shell]# cat list
Hadoop|Spark|Flume--Java|Python|Scala|Golang--Allen|Mike|Meggie
[root@localhost shell]# awk 'BEGIN{RS="--"}{print $0}' list
Hadoop|Spark|Flume
Java|Python|Scala|Golang
Allen|Mike|Meggie [root@localhost shell]# awk 'BEGIN{RS="--";FS="|"}{print $3}' list
Flume
Scala
Meggie # ORS输出分隔符,以&连接各输出行
[root@localhost shell]# awk 'BEGIN{RS="--";FS="|";ORS="&"}{print $3}' list
Flume&Scala&Meggie # 字段默认分隔符是空格
[root@localhost shell]# awk 'BEGIN{RS="--";FS="|";ORS="&"}{print $1,$3}' list
Hadoop Flume&Java Scala&Allen Meggie
& # OFS 指定字段分隔符为 :
[root@localhost shell]# awk 'BEGIN{RS="--";FS="|";ORS="&";OFS=":"}{print $1,$3}' list
Hadoop:Flume&Java:Scala&Allen:Meggie
& # FILENAME 文件名
[root@localhost shell]# awk '{print FILENAME}' list
list # 输出3次文件名list,是因为没有输入匹配模式 awk默认是行处理,文本有3行,处理三次会有3次输出
[root@localhost shell]# cat list
Hadoop|Spark|Flume--Java|Python|Scala|Golang--Allen|Mike|Meggie
Test File
Line
[root@localhost shell]# awk '{print FILENAME}' list
list
list
list # ARGC命令行参数个数
[root@localhost shell]# awk '{print ARGC}' list [root@localhost shell]# awk '{print ARGC}' list /etc/fstab # NF表示字段个数,NF= $NF 就是$ 表示最后一个字段
[root@localhost shell]# awk 'BEGIN{FS=":"}{print $NF}' /etc/passwd
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/bash
/sbin/nologin
/bin/bash
/sbin/nologin
shell编程系列14--文本处理三剑客之awk的概述及常用方法总结的更多相关文章
- shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计
shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计 shell中的数组的用法: shell数组中的下标是从0开始的 array=("Allen" & ...
- shell编程系列18--文本处理三剑客之awk动作中的条件及if/while/do while/for循环语句
shell编程系列18--文本处理三剑客之awk动作中的条件及if/while/do while/for循环语句条件语句 if(条件表达式) 动作1 else if(条件表达式) 动作2 else 动 ...
- shell编程系列20--文本处理三剑客之awk常用选项
shell编程系列20--文本处理三剑客之awk常用选项 awk选项总结 选项 解释 -v 参数传递 -f 指定脚本文件 -F 指定分隔符 -V 查看awk的版本号 [root@localhost s ...
- shell编程系列19--文本处理三剑客之awk中的字符串函数
shell编程系列19--文本处理三剑客之awk中的字符串函数 字符串函数对照表(上) 函数名 解释 函数返回值 length(str) 计算字符串长度 整数长度值 index(str1,str2) ...
- shell编程系列17--文本处理三剑客之awk动作中的表达式用法
shell编程系列17--文本处理三剑客之awk动作中的表达式用法 awk动作表达式中的算数运算符 awk动作中的表达式用法总结: 运算符 含义 + 加 - 减 * 乘 / 除 % 模 ^或** 乘方 ...
- shell编程系列16--文本处理三剑客之awk模式匹配的两种方法
shell编程系列16--文本处理三剑客之awk模式匹配的两种方法 awk的工作模式 第一种模式匹配:RegExp 第二种模式匹配:关系运算匹配 用法格式对照表 语法格式 含义 RegExp 按正则表 ...
- shell编程系列15--文本处理三剑客之awk格式化输出printf
shell编程系列15--文本处理三剑客之awk格式化输出printf printf的格式说明符 格式符 含义 %s 打印字符串 %d 打印十进制数 %f 打印一个浮点数 %x 打印十六进制数 %o ...
- shell编程系列11--文本处理三剑客之sed利用sed删除文本中的内容
shell编程系列11--文本处理三剑客之sed利用sed删除文本中的内容 删除命令对照表 命令 含义 1d 删除第一行内容 ,10d 删除1行到10行的内容 ,+5d 删除10行到16行的内容 /p ...
- shell编程系列12--文本处理三剑客之sed利用sed修改文件内容
shell编程系列12--文本处理三剑客之sed利用sed修改文件内容 修改命令对照表 编辑命令 1s/old/new/ 替换第1行内容old为new ,10s/old/new/ 替换第1行到10行的 ...
随机推荐
- 16、Real-time Personalization using Embeddings for Search Ranking at Airbnb
一.背景 Airbnb 平台包含数百万种不同的房源,用户可以通过浏览搜索结果页面来寻找想要的房源,我们通过复杂的机器学习模型使用上百种信号对搜索结果中的房源进行排序. 当用户查看一个房源时,他们有两种 ...
- PHP实现DES/ECB/PKCS5Padding加密兼容Java SHA1PRNG算法
在使用php调用java接口时,遇到了两边加密结果不一致的问题.经过沟通发现接口方使用了SHA1PRNG算法,对原密码计算后做为Des的加密Key. 因此在php中也需要先对原密码做相应计算才能保持结 ...
- 行为型模式(八) 职责链模式(Chain of Responsibility)
一.动机(Motivate) 在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显示指定,将必不可少地带来请求发送者与接受者的紧耦合.如何使请求的发送者不需要指定 ...
- ubuntu apache2.4.7配置白名单
1.仅允许192.168.1.1访问,此处需要注意apache2.2和2.4版本之后白名单配置的方法是不一样的 <Directory /var/www/> Options FollowSy ...
- Yum 安装memcached 与缓存清空
1.安装 root@pts/0 # yum -y install memcached 2.启动服务 root@pts/0 # /etc/init.d/memcached start 3 ...
- Flume组件
1.什么是Flume:apache顶级项目,主要用来做数据采集.分布式.高可用,将海量日志进行采集.聚合.传输的系统.能够对数据进行简单处理在发送到接收方. 2.Flume组件:source.chan ...
- django 学习第二天
今日内容 一.Django MVC和MTV框架 MVC controller:路由分发 用urls里面放置不同路径 执行不同函数 model 数据库信xi view #views 逻辑相关里面,写函数 ...
- sql server 行转列和列转行的使用
1: 行转列 子查询,获取一定数据集结果 SELECT objid,action,count(1) AS [count] FROM T_MyAttention WHERE objid IN(SELEC ...
- Halting Problem
Halting Problem: 传送门:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4049 总结一个小规律:题目中给的 ...
- UOJ449. 【集训队作业2018】喂鸽子 [概率期望,min-max容斥,生成函数]
UOJ 思路 由于最近养成的不写代码的习惯(其实就是懒),以下式子不保证正确性. 上来我们先甩一个min-max容斥.由于每只鸽子是一样的,这只贡献了\(O(n)\)的复杂度. 现在的问题转化为对于\ ...



