awk

1、定义

awk:按行取列

awk的默认分隔符:空格,tab键,有多个空格自动压缩成一个

2、awk的工作原理

根据指定信息逐行的读取文本内容,然后按照条件进行格式化输出

3、awk的选项

-F:指定分割符,默认是空格

-v:变量复制

4、内置变量

$#:按行需要取出的第几个字段

$0:打印所有,展示所有的文本内容(默认)

NR:需要处理的行号

NF:处理行的字段个数,$NF:当前行的最后一个字段

FS:FS和F都是指定分隔符,FS=","

OFS:指定输出内容的分隔符

RS:行分隔符,可以根据RS的设置把文件内容切割成多个记录,也可以改变行的分隔符,默认是\n,回车,换行

5、命令格式

awk -F '操作符 {动作}' 处理对象

-F 指定分隔符,如果是空格可以不加

动作:默认是打印

打印行号:

awk '{print NR}' 文件

打印行号和内容:

awk '{print NR,$0}' 文件

打印指定行:

awk 'NR==3{print}' 文件

打印第3行到第5行:

awk 'NR==3,NR==5{print}' 文件

打印第3行和第5行:

awk 'NR==3;NR==5{print}' 文件

打印偶数行:

awk 'NR%2==0{print}' 文件

打印奇数行:

awk 'NR%2==1{print}' 文件

指定分隔符:

awk -F分隔符 'print $第几字段' 文件

6、awk怎么使用文本过滤

过滤包含root的行:

awk '/root /{print}' /etc/passwd

7、BEGIN打印模式

awk 'BEGIN{...};{...};END{...}' 文件

BEGIN{...}预先的条件,指定awk命令前的初始化操作

{...}处理条件,如何对初始值进行操作

END{...}处理完之后的操作,一般都是打印

awk 'BEGIN{x=1};{x++};END{print x}' 文件

取幂运算:

awk 'BEGIN{print 2**3}' ​

awk 'BEGIN{print 2^3}'

-v进行赋值:

read -p "输入一个数: " a 

read -p "输入次方:" b

num=$(awk -v a="$a" -v b="$b" 'BEGIN{print a^b}')

echo $num

8、awk的条件判断打印

打印第三列所有大于999的:

awk -F: '$3>999{print $0}' /etc/apsswd

取反:

awk -F: '!($3>999){print $0}'

打印第3列等于999:

awk -F: '$3==999{print $0}'

9、awk的三元表达式

if

else语句

awk -F:'{num=($3>$4)?$3:$4;{print num,$0}}' /etc/passwd

num=($3>$4)?$3:$4;

? if

:else

; fi

10、awk的精确筛选

$n(><==) 用于比较数值之间的大小

$n~"字符串" :表示该字段包含某个字符串

$n!~"字符串“ :该字段不包含某个字符串

$n=="字符串" :该字段等于这个字符串

$n!="字符串" :该字段不等于这个字符串

打印第七列包含bash这个字段的行,取的是行的第一列和最后一列,以:作为分隔符

awk -F: '$7~"bash" {print $1,$NF}' /etc/passwd

打印第七列包含bash这个字段的行,取的是行的第一列到第三列,以:作为分隔符

awk -F: '$7~"bash" {print $1,$2,$3}' /etc/passwd

打印第七列不包含bash这个字段的行,取的是行的第一列到第三列,以:作为分隔符

awk -F: '$7!~"bash" {print $1,$2,$3}' /etc/passwd

打印第七列等于/bin/bash这个字段的行,取第一列和第二列

awk -F: '$7=="/bin/bash" {print $1,$2}' /etc/passwd

11、逻辑关系

打印第三行的第三列

cat awk.sh | awk 'NR==3{print $3}'/10

打印/etc/passwd第一列=dn,第七列=/bin/bash

awk -F: '($1=="dn")&&($NF=="/bin/bash") {print $1,$NF}' /etc/passwd

12、curl

12.1作用

是一个功能强大的命令

作用:获取和发送数据

curl www.baidu.com

curl 192.168.230.20

12.2获取网页内容并输出

-O:下载文件到本地

-o:将文件下载到指定的路径

-x:发送post请求

-i:可以获取web软件的版本(服务端没有隐藏版本号)

13、awk的运算

num=$(awk 'BEGIN{print 1.243+4.932}')

取小数点后两位(四舍五入)

num=$(awk 'BEGIN{printf "%.2f", 1.243*4.932}')

只取整数

num=$(awk 'BEGIN{printf "%.F", 1.243*4.932}')

练习1:使用awk,将主机名取出来

[root@localhost opt]# cat test2.txt

1 www.kgc.com

2 mail.kgc.com

3 ftp.kgc.com

4 linux.kgc.com

5 blog.kgc.co

[root@localhost opt]# cat test2.txt | awk -F'[ .]+' '{print $2}'

www

mail

ftp

linux

blog

练习2:使用awk,统计/etc下文件的总大小

ll /etc | awk '/^-/{print sum+=$5} END{print "文件的总大小:"sum/1024"M"}'

  • 12
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值