awk命令 的详解

一. awk支持的语法格式:

  1. 支持内置变量
  2. 支持函数
  3. 支持条件操作,正则表达式匹配
  4. 支持流程控制语句,类似于c语言

1.使用awk 过滤多个字符

[root@node1 ~]# awk -F: ‘/^(root|adm)/{print $1,$3}’ /etc/passwd

root 0

adm 3

[root@node1 ~]# awk -F: ‘/root|adm/{print $1,$3}’ /etc/passwd

root 0

adm 3

operator 11

2.打印文件的行数

[root@node1 ~]# sed -n ‘$=’ /etc/passwd

[root@localhost awk]# awk ‘BEGIN{x=0;} {x++;} END{print x}’ passwd
19
[root@localhost awk]# wc -l passwd
19 passwd

2.1 打印所有的行数

[root@localhost awk]# awk ‘//{print }’ passwd

3. 使用分割符

命令解释: -F ‘:’ 是以:进行分割,
如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割

[root@localhost awk]# awk  -F ':'  '{print $1"\t"$7}'  passwd 
root    /bin/bash
bin     /sbin/nologin
daemon  /sbin/nologin
adm     /sbin/nologin
lp      /sbin/nologin
sync    /bin/sync
shutdown        /sbin/shutdown
halt    /sbin/halt
mail    /sbin/nologin
operator        /sbin/nologin
games   /sbin/nologin

4,如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行添加列名name,shell,在最后一行添加"blue,/bin/nosh"。

[root@localhost awk]#   awk  -F ':'  'BEGIN {print "name,shell"}  {print $1","$7} END {print "blue,/bin/nosh"}' passwd 
name,shell
root,/bin/bash
bin,/sbin/nologin
daemon,/sbin/nologin
adm,/sbin/nologin
operator,/sbin/nologin
blue,/bin/nosh

5.awk过滤包含关键字 (跟grep的用法是一直的)

[root@localhost awk]# awk -F: '/root/' passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

案例,过滤最近登录系统的用户数

[root@localhost awk]#  last -n 5 
root     pts/1        192.168.199.1    Fri Dec  7 00:36   still logged in   
root     pts/0        192.168.199.1    Thu Dec  6 23:24   still logged in   
root     pts/0        192.168.199.1    Thu Dec  6 18:38 - 21:48  (03:10)    
root     tty1                          Thu Dec  6 18:37   still logged in   
reboot   system boot  3.10.0-693.el7.x Thu Dec  6 18:34 - 00:44  (06:09)    

wtmp begins Tue Dec  4 19:45:18 2018

使用awk过滤

[root@localhost awk]# last -n 5 | awk  '{print $1}'
root
root
root
root
reboot

wtmp

参考博文
https://blog.youkuaiyun.com/zl378837964/article/details/84829852

使用awk 统计文件的行数

[root@localhost awk]# awk ‘BEGIN{x=0;} {x++;} END{print x}’ passwd
19
[root@localhost awk]# wc -l passwd
19 passwd

使用awk 过滤第一列和最后一列

[root@localhost awk]# awk -F ‘:’ ‘{print $1}’ passwd | head -5
root
bin
daemon
adm
lp
[root@localhost awk]# awk -F ‘:’ ‘{print 1 , 1, 1,NF}’ passwd | head -5
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin

awk还可以结合管道和重定向,进行使用

[root@localhost awk]# awk -F ‘/’ ‘{print $NF}’ passwd > 1.txt
[root@localhost awk]# ls
1.txt passwd
[root@localhost awk]# cat 1.txt
bash
nologin
nologin
nologin
nologin
sync

awk使用正则表达式,可以参考以下博文
https://www.cnblogs.com/slpawn/p/8747930.html

使用awk截取字符

[root@localhost awk]# awk ‘{print substr($0,5,5)}’ passwd | head -10
❌0:
x:1:1
on❌
x:3:4
:4:7:
命令解释:从第一个字符开始计算,第五个开始,截取5个字符

使用awk进行对命令进行过滤,显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行添加列名name,shell,在最后一行添加"blue,/bin/nosh"

[root@localhost awk]# cat passwd |head -5 |awk -F ‘:’ ‘BEGIN {print “name,shell”} {print $1","$7} END {print “blue,bing log”}’
name,shell
root,/bin/bash
bin,/sbin/nologin
daemon,/sbin/nologin
adm,/sbin/nologin
lp,/sbin/nologin
blue,bing log
awk工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域, 1 表 示 第 一 个 域 , 1表示第一个域, 1,n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。

这个是awk内置变量的博文

http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html

awk还可以同时过滤多个文件

参考博文
https://blog.youkuaiyun.com/u010533843/article/details/78551622
awk ‘{ print FILENAME,$0 }’ file1 file2 file3>fileall
把file1、file2、file3的文件内容全部写到fileall中,格式为 打印文件并前置文件名。

awk系统的教程

https://www.yiibai.com/awk/awk_environment.html

awk还可以支持脚本(但是后缀必须是awk结尾的脚本)

1、标准的语法格式
awk [options] -f file …

2.案例操作
[root@localhost awk]# awk ‘{print}’ marks.txt
Amit Physics 80
Rahul Maths 90
Shyam Biology 87
Kedar English 85
Hari History 89
[root@localhost awk]# touch command.awk
[root@localhost awk]# ls
command.awk marks.txt passwd
[root@localhost awk]# vim command.awk (必须是awk后缀结尾)
{print}
:wq
[root@localhost awk]# awk -f command.awk marks.txt
Amit Physics 80
Rahul Maths 90
Shyam Biology 87
Kedar English 85
Hari History 89

awk 还可以顺序调转打印文件内容

[root@localhost awk]# awk ‘/a/ {print $1 “\t” $3}’ marks.txt
Rahul 90
Shyam 87
Kedar 85
Hari 89
[root@localhost awk]# awk ‘/a/ {print $3 “\t” $1}’ marks.txt
90 Rahul
87 Shyam
85 Kedar
89 Hari

使用awk进行个数统计

awk ‘/a/{++cnt} END {print "Count = ", cnt}’ marks.txt
Count = 4

使用AWK 进行对文本内容进行,分割

[root@localhost tang]# cat 4.txt
nihao,nih;zhang"zhao"ma
[root@localhost tang]# awk -F’[,;"]’ ‘{print $1,$2,$3,$4,$5}’ 4.txt
nihao nih zhang zhao ma

12.使用awk中的FS过滤不规则的列

[root@king ~]# cat /proc/cpuinfo 
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 142

[root@king ~]# awk 'BEGIN{FS="[ \t]+:[ \t]"} /vendor_id/ {print $2}' /proc/cpuinfo
GenuineIntel

命令解释:
awk截取信息, FS为指定格式; 以 “:” 冒号为分界符,两边都是制表符"\t",第二个参数
/machine指定了以machine为开始的那一行

https://www.cnblogs.com/rohens-hbg/p/5510890.html

13.如果要指定两个分隔符,进行过滤数据,要用[ ] 包括

awk -F ‘[-:]’ '{print $1,$2}’ access.log
https://www.cnblogs.com/rainy-shurun/p/5426541.html

 cat liumin.sh  | awk -F '[\":\"]' '{print $42}'  | sort | uniq -c

在这里插入图片描述

14.awk 外在变量和内在变量

https://www.cnblogs.com/-clear-/p/7570841.html

15.awk -v 选项 是指定在任何输入被读入前定义参数 #指定执行BEGIN前的变量赋值

实例:

[root@king shell]# awk -v n=1 ‘BEGIN{print n}’
1

参考博文:
http://bbs.chinaunix.net/thread-4208706-1-1.html

16.awk 使用内置函数

substr 截取字符串
返回从起始位置起,指定长度之子字符串;若未指定长度,则返回从起始位置到字符串末尾的子字符串。
格式:
substr(s,p) 返回字符串s中从p开始的后缀部分
substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分

[king@king ~]$ df -v | grep  /boot
/dev/sda1                1038336  134980   903356   13% /boot
[king@king ~]$ df -v | grep  "/boot"|awk '{print substr($4,1,2)}'
90

cat debug.log.2019-08-27.bak  | grep 已兑换数量  | awk '{print $10}'

cat debug.log.2019-08-27.bak | grep 已兑换数量 | awk -F , '{print $5}' | awk -F [ '{print $2}' | awk -F ] '{print $1}  

17、 awk -v FIELDWIDTHS=“23 8 9999”

18、awk之判断

awk之判断

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维螺丝钉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值