Awk
-f :指定分隔符,默认是空格,多个连续的空格自动压缩成一个
-v:变量赋值
内置变量:
NR:表示行号
FS:列分隔符和F作用一致,如果硬FS,FS=”.”
OFS:输出内容的列分隔符
NF:最后一个字段
$n:内置变量
Awk格式 :第一种 : awk ’ 指定条件 {处理动作} ’
第二种 : awk ‘ BEGIN{X=1}{xx==}END {处理动作}’
第一行到第三
Awk必须要会的按行取列
Awk标准用法 ,也是必须要会的
取第二列与最后一列
这里的NF 为最后一列
Awk的精准筛选
$n ( > < == ):进行数值对比
$n~ ”字符串” :代表这个字段包含某个字符串
$n!~ “字符串” :取反代表这个字段不包含某个字符串
$n== “字符串” :代表这个字段要和字符串相同
$n!= “字符串 ”:取反,不为某个字段
$NF: 代表最后一个字段
练习
- /etc/passwd
输出最后一个字段中包含bash所在行的第一个字段和最后一个字段
- /etc/passwd
只有第一列是root的行,才打印祂的第六列
输出最后一个字段,不包含bash,然后打印第一列和第六列
指定第六个字段为/home/dn(自定义)而且最后一个字段为/bin/bash.满足条件的输出第一列,和最后一列
打印第三列所有大于500的,然后输出全部内容,/etc/passwd
第二种方式
条件判断打印
If语句
面试题
Awk的三元表达式 :继承了java,格式和java也一样
Awk ‘ {条件表达式1?A表达式或者值:B表达式或者值} ’ 文件名
?:
if else
if [ $3>=$4 ]
then
echo "$3"
else
echo "$4"
fi
根据文本内容匹配过滤打印
以root为开头,以bash为结尾
面试题
取出www和mail
第一种
第二种
Awk中的getline函数: getline 和管道符以及重定向符号在一块的时候,
重定向: < > 把其中一个文件的内容传给另外一个
| : 输出指定内容,打印结果
getline 函数运行之后会改变awk的内置变量,读取的行数也就发生变化,getline在前,就是跳过1 2 ,getline 在后,变量就会变成,从第一行开始,跳过第二行,打印的就是奇数
重定向
管道符
-v :
Awk begin模式
Awk和数组结合使用
Awk中如何定义数组
遍历
索引下标的值是唯一的
Awk按行取列 awk -F: ‘{print $1 ,$3}’ /etc/passwd
Awk 的运算格式 :awk ‘ BEGIN {print 2^3或者2**3} ’
Awk 的精准筛选:
Awk -v的赋值变量 :awk -v a=”$a” ,在awk当中,打印变量不需要加$
Awk 的按行 行号范围区间打印
Awk 的文本内容过滤:awk ‘/root/{print}’ /etc/passwd
getline方法了解即可
示例
- 日志分割 时间及主机名取出来