awk常用的变量

awk:

常用的变量

-F:指定分隔符,默认就是空格,多个连续的空格自动压缩成一个

-v:变量赋值

内置变量:

NR:行号

FS:列分隔符和F 作用一致, 如果用FS,FS=":"

OFS:输出内容的列分隔符,

NF:最后一个字段

$n:内置变量

awk ’指定条件{处理动作}‘

awk 'BEGIN(x=1)END(处理动作)'

awk -F: '{print $2,$NF}' /etc/passwd

NF:表示最后一列

$n (>< ==):进行数值对比

$n~"字符串":代表这个字段包含某个字符串

$n=="字符串" :代表这个字段要和字符串相同

$n!="字符串" :取反,不为某个字段

$NF: 代表最后一个字段6

1、/etc/passwd

输出最后一个字段中包含bash所在行的第一个字段和最后一个字段

2、/etc/passwd

只有第一列是root的行,才打印它的第六列

3、输出最后一个不字段不包含bash,然后打印第一列和第六列

4、指定第六个字段为/home/xxx 而且最后一个字段为/bin/bash 满足条件的输出第一列和最后一列

5、打印出第三列大于500的输出全部内容

条件的判断打印

if语句

if $3>500 打印所有:

awk的三元表达式:继承了java 格式和java也一样

awk {条件表达式1 ? A表达式或者值: B表达式或这值} /etc/passwd

awk -F: {max={$3>=$4}?$3:$4;{print max $0}} /etc/passwd

?:

if else

if [$3>=$4]

then

echo $3

else

echo $4

fi

文本内容匹配过滤打印

getline函数:getline和管道符以及重定向符号在一块的时候

重定向:< >把其中一个文件的内容传给另外一个

|:输出指定内容,先到定义的变量,getline在调用变量当中得内容最后,打印结果

getline函数运行之后会改变awk的内置变量,读取得行数也就发生变化,getline在前,就是从第一行跳过由1跳到2

getline在后,直接从第一行开始跳过第二行打印得就是奇数

ls | awk '{getline ky32;print $0,ky32;}'

-v:给变量进行赋值

BEGIN模式:

对变量初始化:

面试题:用数组唯一进行

awk '{a[$1]++};END{for(i in a) {print i,a[i]}}' ky32.txt

cat ky32.txt | sort -n | uniq -c

初始值:

awk处理行从0开始

a[$1]=0

0++=1

a[1]=1

i in a

i=111

a[111]=1

a[111]=1

a[$1]++

a[111]++=2

a[222]=0++=1

a[333]=0++=1

a[111]++=3

a[222]++=2

a[111]++=4

索引的下标值是唯一的

awk的代码逻辑和shell不是一个逻辑

有几行循环几次 7次

awk处理行从0开始

0++=1

a的值会赋给i

总结:

awk按行取列

格式awk -F: '{print $1,$3}' /etc/passwd

多个列用,分开

awk的运算格式

awk 'BEGIN{print 2+3}'

awk的精准筛选

$n (>< ==):进行数值对比

$n~"字符串":代表这个字段包含某个字符串

$n=="字符串" :代表这个字段要和字符串相同

$n!="字符串" :取反,不为某个字段

$NF: 代表最后一个字段

awk -v赋值变量:

把shell当中的变量传给awk

awk -v a="$a"

在awk当中打印变量不需要加¥

awk的按行,行号,行号范围区间打印

文本内容过滤

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

getline方法了解

数组遍历排序去重了解即可

free -m | awk '{print $3}'

free -m | awk '(NR>1)&&(NR<3){print $3}'

sum=$(awk 'BEGIN{print 2.333*3.333}')

echo=$sum

sum=$(awk 'BEGIN{printf "%.2f", 2.333*3.333}')保留小数

sum=$(awk 'BEGIN{printf "%.F", 2.333*3.333}')保留整数

top -b -n 1

awk ''

awk把静态进程的sy取出来

df -h

df -h | grep -w centos-root | awk '{print $5}' | tr -d "%"

用awk统计/etc下文件大小

ls -l /etc/*.conf | awk '{i+=$5}END{print i}'

df

df | awk 'NR>1{sum+=$3}END{print "磁.的已用容量:"sum/1024/1024"G"}'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值