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"}'