awk基础学习
2019-12-20
需要巧记,很多格式,学习难度:grep、sed、awk
awk知识概述
1三剑客awk命令介绍
2三剑客awk命令执行原理语法结构
3三剑客awk命令实操练习
查询替换信息排除(取反)
4三剑客awk命令高级功能
一awk命令概述
awk -pattern scanning and processing language
模式扫描(处理文件每一行信息)
过程语言(一门脚本语言、逻辑语句(循环/判断))
读取内容放到内存里面,而不是模式空间。模式就相当于sed的条件
命令语法结构:awk [参数] ‘模式{动作信息}’ 文件信息
作用说明:
1)擅长对文件列进行操作
2)擅长统计分析数据信息
[root@centos71 test]# cat awk.txt
#!/bin/awk
[root@centos71 test]# file awk.txt
awk.txt: awk script, ASCII text executable
[root@centos71 test]# cat python
#!/bin/python
[root@centos71 test]# file python
python: a /bin/python script, ASCII text executable
二awk命令操作
空格和制表符是有区别的
匹配空格时无法匹配制表符
对文件对齐
[root@centos71 test]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 41922560 3010792 38911768 8% /
devtmpfs 487064 0 487064 0% /dev
tmpfs 497960 0 497960 0% /dev/shm
tmpfs 497960 7924 490036 2% /run
tmpfs 497960 0 497960 0% /sys/fs/cgroup
/dev/sda1 201380 107080 94300 54% /boot
tmpfs 99596 0 99596 0% /run/user/0
[root@centos71 test]# df | column -t
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 41922560 3010792 38911768 8% /
devtmpfs 487064 0 487064 0% /dev
tmpfs 497960 0 497960 0% /dev/shm
tmpfs 497960 7924 490036 2% /run
tmpfs 497960 0 497960 0% /sys/fs/cgroup
/dev/sda1 201380 107080 94300 54% /boot
tmpfs 99596 0 99596 0% /run/user/
(一)显示xiaoyu的姓氏和ID号码
根据条件找出相应行
[root@centos71 test]# cat awk.txt
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250:100:175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175 [root@centos71 test]# awk '/Xiaoyu/{print $0}' awk.txt
Zhang Xiaoyu 390320151 :155:90:201
[root@centos71 test]# awk '/Xiaoyu/' awk.txt
Zhang Xiaoyu 390320151 :155:90:
awk取出多列信息可以使用 , 或者 " " 进行分隔
注意只能使用双引号
[root@centos71 test]# awk '/Xiaoyu/{print $1" "$3}' awk.txt
Zhang
[root@centos71 test]# awk '/Xiaoyu/{print $1,$3}' awk.txt
Zhang
在系统中有时引号需要嵌入式使用时,不能使用相同:
[root@centos71 test]# awk '/Xiaoyu/{print $1' '$3}' awk.txt
awk: cmd. line:1: /Xiaoyu/{print $1
awk: cmd. line:1: ^ unexpected newline or end of string
$n~/xxx/取出第n列里面有xxx信息
~表示匹配,出现在awk或者搭建网站的配置文件里面
[root@centos71 test]# awk '$2~/Xiaoai/{print $1,$4}' awk.txt
Wang :50:95:
(二)姓氏是zhang的人,显示他的第二次捐款金额及他的名字
根据条件找出相应行
[root@centos71 test]# awk '$1~/Zhang/' awk.txt
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
[root@centos71 test]#
[ :]+表示以空格或者冒号作为分隔符,一次或者多次
[root@centos71 test]# cat awk.txt
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75 Xiaoai
Liu Bingbing 41117483 :250:100:175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175 [root@centos71 test]# awk -F "[ :]+" '$1~/Zhang/{print $1,$2,$5}' awk.txt
Zhang Dandan 100
Zhang Xiaoyu
#| "表示#和空格是一个字符串了,整体识别
利用-F指定列分隔符,结合正则可以识别多个分隔符号
[root@centos61 ~]# awk -F "#| " '{print $1,$3}' /etc/selinux/config This
SELINUX= SELINUX=enforcing
SELINUXTYPE= SELINUXTYPE=targeted [root@centos61 ~]# cat /etc/selinux/config # This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
[root@centos61 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 3.7G 0 rom
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 48.8G 0 part /
├─sda3 8:3 0 19.5G 0 part /app
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 2G 0 part [SWAP]
[root@centos61 ~]# lsblk | awk -F "[: ]+" '{print $1,$3}' | column -t
NAME MIN
sr0 0
sda 0
├─sda1 1
├─sda2 2
├─sda3 3
├─sda4 4
└─sda5
(三)显示所有以41开头的ID号码的人的全名和ID号码
简单,注意正则被三剑客所使用
[root@centos71 test]# awk '$3~/^41/' awk.txt
Zhang Dandan 41117397 :250:100:175
Liu Bingbing 41117483 :250:100:
[root@centos71 test]# awk '$3~/^41/{print $1,$2,$3}' awk.txt
Zhang Dandan 41117397
Liu Bingbing
连续出现的字段可以使用高级方法
[root@centos71 test]# awk '{for(i=1;i<=3;i++) printf $i""FS;print ""}' awk.txt
Zhang Dandan 41117397
Zhang Xiaoyu 390320151
Meng Feixue 80042789
Wu Waiwai 70271111
Liu Bingbing 41117483
Wang Xiaoai 3515064655
Zi Gege 1986787350
Li Youjiu 918391635
Lao Nanhai 918391635
利用awk命令连续显示多列信息
[root@centos71 test]# awk '{for(i=1;i<=3;i++){print $i}}' num.txt
01
02
03
01
02
03
[root@centos71 test]# awk '{for(i=1;i<=3;i++){printf $i}}' num.txt
010203010203[root@centos71 test]#
换行显示
[root@centos71 test]# awk '{for(i=1;i<=3;i++){printf $i" "};printf "\n"}' num.txt
01 02 03
01 02 03
(五)显示所有以5或者0结尾id显示出来,并显示人的名字和ID号码
awk '$3~/[05]$/{print $1,$2,$3}' awk.txt
Wang Xiaoai 3515064655
Zi Gege 1986787350
Li Youjiu 918391635
Lao Nanhai
[root@centos71 test]# awk '$3!~/[05]$/{print $1,$2,$3}' awk.txt
Zhang Dandan 41117397
Zhang Xiaoyu 390320151
Meng Feixue 80042789
Wu Waiwai 70271111
Liu Bingbing 41117483
[root@centos71 test]# which awk
/usr/bin/awk
[root@centos71 test]# ll /usr/bin/awk
lrwxrwxrwx. 1 root root 4 Nov 26 17:32 /usr/bin/awk -> gawk
(六)显示Xiaoyu的捐款,每个都以$开头
[root@centos71 test]# awk '$2~/Xiaoyu/{gsub(/:/,"$",$4);print $4}' awk.txt
$155$90$
awk替换信息方法
二awk命令高级用法
awk模式概念:
普通模式: 利用正则进行匹配/利用行号进行匹配/利用字符进行匹配
特殊模式:
BEGIN: 在处理文件之前先做的事情 (准备工作)
END: 在处理文件之后要做的事情 (后续工作)
(一)在处理文件之前加表头
[root@centos71 test]# awk 'BEGIN{print"姓","名","id","金额"}{print $0}' awk.txt
姓 名 id 金额
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75 Xiaoai
Liu Bingbing 41117483 :250:100:175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:
[root@centos71 test]# awk 'BEGIN{print"姓","名","id","金额"}{print $0}' awk.txt | column -t
姓 名 id 金额
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75 Xiaoai
Liu Bingbing 41117483 :250:100:175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175
(二)进行四则运算
[root@centos71 ~]# awk 'BEGIN{print 2+2}'
4
[root@centos71 ~]# awk 'BEGIN{print 2-2}'
0
[root@centos71 ~]# awk 'BEGIN{print 2*2}'
4
[root@centos71 ~]# awk 'BEGIN{print 2/2}'
(三)进行变量设定
注意要加双引号,打印时不需要加$
[root@centos71 ~]# awk 'BEGIN{name=wang;print name}' [root@centos71 ~]# awk 'BEGIN{name="wang";print name}'
wang
内置变量NR表示行号信息
[root@centos71 ~]# cat -n /etc/issue
1 \S
2 Kernel \r on an \m
3
[root@centos71 ~]# awk '{print NR}' /etc/issue
1
2
NF:显示一行里面的字段数量
[root@centos61 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
chrony:x:498:499::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
[root@centos61 ~]# cat /etc/passwd | wc
22 28 983
[root@centos61 ~]# awk -F: '{print NF}' /etc/passwd | wc
22 22
FS : 表示分隔符字段信息
[root@centos61 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 50264772 910576 46794196 2% /
tmpfs 502068 0 502068 0% /dev/shm
/dev/sda3 20027260 44992 18958268 1% /app
/dev/sda1 999320 30508 916384 4% /boot
[root@centos61 ~]# df | awk -v FS=" " '{print $1,$5}'
Filesystem Use%
/dev/sda2 2%
tmpfs 0%
/dev/sda3 1%
/dev/sda1 4%
[root@centos61 ~]# df | awk -v FS=" " '{print $1,$5}' | column -t
Filesystem Use%
/dev/sda2 2%
tmpfs 0%
/dev/sda3 1%
/dev/sda1 4%
(四)END统计分析日志公式信息
[root@centos61 ~]# awk '/sbin/{i=i+1}END{print i}' /etc/passwd
21
[root@centos61 ~]# grep sbin /etc/passwd | wc
21 27
[root@centos71 ~]# grep "sbin" /etc/passwd -o
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
(五)END求和运算
求和公式: i=i+$n $
n 需要将第几列做求和运算
i=i+$1 i=0 i=0+1 print i--->1
i=i+$1 i=1 i=1+1 print i--->2
初始值为0
[root@centos61 ~]# seq 10 > seq.txt
[root@centos61 ~]# cat seq.txt
1
2
3
4
5
6
7
8
9
10
[root@centos61 ~]# awk '{i=i+$1; print i}' seq.txt
1
3
6
10
15
21
28
36
45
55
[root@centos61 ~]# awk '{i=i+$1}END{ print i}' seq.txt
awk基础学习的更多相关文章
- 鸟哥Linux私房菜基础学习篇学习笔记3
鸟哥Linux私房菜基础学习篇学习笔记3 第十二章 正则表达式与文件格式化处理: 正则表达式(Regular Expression) 是通过一些特殊字符的排列,用以查找.删除.替换一行或多行文字字符: ...
- Linux shell脚本基础学习详细介绍(完整版)一
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...
- salesforce 零基础学习(五十二)Trigger使用篇(二)
第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...
- 如何从零基础学习VR
转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...
- IOS基础学习-2: UIButton
IOS基础学习-2: UIButton UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...
- HTML5零基础学习Web前端需要知道哪些?
HTML零基础学习Web前端网页制作,首先是要掌握一些常用标签的使用和他们的各个属性,常用的标签我总结了一下有以下这些: html:页面的根元素. head:页面的头部标签,是所有头部元素的容器. b ...
- python入门到精通[三]:基础学习(2)
摘要:Python基础学习:列表.元组.字典.函数.序列化.正则.模块. 上一节学习了字符串.流程控制.文件及目录操作,这节介绍下列表.元组.字典.函数.序列化.正则.模块. 1.列表 python中 ...
- python入门到精通[二]:基础学习(1)
摘要:Python基础学习: 注释.字符串操作.用户交互.流程控制.导入模块.文件操作.目录操作. 上一节讲了分别在windows下和linux下的环境配置,这节以linux为例学习基本语法.代码部分 ...
- CSS零基础学习笔记.
酸菜记 之 CSS的零基础. 这篇是我自己从零基础学习CSS的笔记加理解总结归纳的,如有不对的地方,请留言指教, 学前了解: CSS中字母是不分大小写的; CSS文件可以使用在各种程序文件中(如:PH ...
随机推荐
- C#爬虫之Senlium
在爬虫过程中,有的网页是动态更新的,有的数据会在页面加载时通过js加载或者用ajax加载,这时候如果只用普通的Request和Response获取的HTML页面将会不完整.所以这时候可以采用Senli ...
- UVA11987 带删除并查集
1~n,n个数,初始每个数独自作为一个集合,然后进行m次操作.操作有三种:1 p q :把 p 所在的集合合并到 q 所在的集合 2 p q :把 p 从 p 的集合中拿出,放到 q 的集合里 3 p ...
- Go语言入门篇-基本数据类型
一.程序实体与关键字 任何Go语言源码文件都由若干个程序实体组成的.在Go语言中,变量.常量.函数.结构体和接口被统称为“程序实体”,而它们的名字被统称为“标识符”. 标识符可以是任何Unicode编 ...
- mysql 恢复数据时中文乱码
mysql恢复数据时中文乱码,解决办法. 用source命令导入mysql数据库怎么设置中文编码 1.导出数据时指定编码在导出mysql sql执行文件的时候,指定一下编码格式: mysqldump ...
- 记一次有趣的JsonFormat不生效问题
dto中使用了JsonFormat注解,如图 然后再序列化时 objectMapper.writeValueAsString(printReceBillVO) 始终值是一个Long,最后发现是包引用错 ...
- JS案例经验1
一 可以通过设置在一个div中的多个div的定位属性为absolute,从而使得这几个元素重叠.他们都脱离了标准流. 二 对于absolute的left和right属性,当left和right同时出现 ...
- [LeetCode] 203. 移除链表元素
题目链接:https://leetcode-cn.com/problems/remove-linked-list-elements/ 题目描述: 删除链表中等于给定值 val 的所有节点. 示例: 输 ...
- 前端UI库推荐(pc和移动)
此推荐个人喜好,不喜勿喷. 1. pc 端 elementUI (生态强大,样式生硬) iview (推荐,组件丰富) bootStrap layUI easyUi 2. 移动端 mintUI ant ...
- MySQL第一讲 一一一一 数据库入门
一. MySQL简介与安装 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方 ...
- JavaScript的循环结构和经典题目
一.JS中的循环结构 循环结构的执行步骤1.声明循环变量:2.判断循环条件;3.执行循环体操作:4.更新循环变量:5.然后循环执行2-4,直到条件不成立,跳出循环. while循环()中的表达式,运算 ...