文本三剑客之awk

awk 按行取列
awk默认的分割符:空格,tab键,多个空格自动压缩成一个
awk的工作原理,根据指令信息,逐行读取文本内容,然后按照条件进行1格式化输出
awk的选项:
-F 指定分割符,默认就是空格
-v 变量赋值
内置变量:
$#:#是数字,按行需要取出的第几个字段
0 :打印所有,展示所有的文本内容(默认) N R :需要处理的行号 N F :处理行的字段个数, 0:打印所有,展示所有的文本内容(默认) NR:需要处理的行号 NF:处理行的字段个数, 0:打印所有,展示所有的文本内容(默认)NR:需要处理的行号NF:处理行的字段个数,NF:处理行的最后一个字段
FS:FS和F是一样的,都是指定分隔符FS=“:”
OFS:指定输出内容的分隔符
RS:行分隔符,可以根据RS的设置把文件内容切割成多个记录,也可以改变行的分隔符,默认是\n,回车,换行。
命令格式:
awk -F ‘操作符{动作}’ 处理对象
-F指定分隔符,如果是空格可以不加
动作:默认就是打印

#打印文件内容,默认是所有文件
awk '{print}' 文件
#只打印行号
awk '{print NR}' 文件
#打印行号和内容
awk '{print NR,$0}' 文件
#打印指定行
awk 'NR==行数{print}' 文件
#;打印3和5行
awk 'NR==3,NR==5{print}' 文件
#打印奇偶行
awk 'NR%2==0{print}' 文件
awk 'NR%2==1{print}' 文件
#指定分割符
awk -F: '{print $3}' /etc/passwd
#awk 使用文本过滤
awk '/root/{print}' /etc/passwd
#BEGIN 打印模式
awk 'BEGIN{...};{...};END{...}' 文件
#BEGIN{...} 表示预先条件,指定awk命令前的初始化操作
#{...}处理条件,如何对初始值进行操作
#END{...}处理完之后的操作,一般都是打印
#区幂运算 2的3次方
awk 'BEGIN{print 2**3}'		awk 'BEGIN{print 2^3}'
#-v进行赋值
vim test.sh
read -p "请输入一个数:" num1
read -p "请输入你需要进行的幂运算:" num2
num=$(awk -v num1="$num1" -v num2="$num2" 'BEGIN{print num1^num2}' )
echo $num
awk -v FS=":" -v OFS="==" '{print $1,$3}' /etc/passwd
echo $PATH | awk -v RS=":" '{print $1}'
awk -F: '$3>999{print $0}' /etc/passwd
awk -F: '$3==1000{print $0}' /etc/passwd

awk的三元表达式:

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

awk的精确筛查:

$n(> < ==)用于比较数值
$n~"字符串":该字段包含某个字符串
$n!~"字符串":该字段不包含某个字符串
$n=="字符串":该字段等于这个字符串
$n="字符串":该字段不等于这个字符串
$NF 代表最后一个字段
#打印第七列包含bash这个字段的行,取的是行的第一列和最后一列,以:为分隔符
awk -F: '$7~"bash" {print $1,$NF}' /etc/passwd
awk -F: '$7!~"bash" {print $1,$NF}' /etc/passwd		#取反
awk -F: '$7=="bash" {print $1,$NF}' /etc/passwd		#精确匹配

逻辑关系:

#第一列=dn且第七列=/bin/bash
awk -F: '($1=="dn")&&($NF=="/bin/bash") {print $1,$NF}' /etc/passwd
#逻辑或
awk -F: '($1=="ntp")||($NF=="/bin/bash") {print $1,$NF}' /etc/passwd
#打印文件内容的第一行和第九行
cat /var/log/nginx/access.log | awk '{print $1,$9}'
cat test.sh | awk 'NR>2{print $3}'
cat test.sh | awk 'NR==3{print $3}'
cat test.sh | awk 'NR>=2{print $3}'
cat test.sh | awk 'NR!=1{print $3}'

curl主要作用是发送数据
curl 域名/IP地址 获取网页内容并且输出
-O 下载文件到本地
-o 将文件下载到指定的路径
-x 发生post请求
-i 取web软件的版本(服务端没有隐藏版本号)

#取小数点后几位(四舍五入)
num=$(awk 'BEGIN{printf "%.2f", 2.222+2.222}')
echo $num
#取整数(四舍五入)
num=$(awk 'BEGIN{printf "%.F", 2.222*2.222}')
echo $num
#用awk把主机名取出来
vim test.txt
1 www.kgc.com
2 mail.kgc.com
3 ftp.kgc.com
4 linux.kgc.com
5 blog.kgc.co
cat test.txt | awk -F'[ .]+' '{print $2}'
cat test.txt | awk 
#统计/etc下文件的总大小
ll /etc | awk '/^-/{print sum+=$5}''END{print "文件的总大小是:"sum/1024"M"}'
#1,6,7行磁盘中的容量和
df |grep -v "tmpfs" | grep -v "/dev/sr0" | awk 'NR>1{sum+=$3} END{print "磁盘中的容量是:"sum/1024/1024"G"}'
  • 15
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值