awk(三剑客最后的一个)

awk也是文本三剑客之一,是功能最强大的文本工具
awk也是按行进行操作的,对行操作完之后,可以根据指定命令来对行取列
awk的分隔符:他的默认分隔符是空格或者tab键。多个空格,他会自动压缩成一个
用法:
awk 选项 ‘模式或者条件{操作}’ 文件
-F :指定分隔符,如果是空格,不需要加F
-V:变量赋值
操作:默认就是打印
awk -F跟着分隔符 ‘条件’ 文件 $1 $2 $3都是指的列
$0表示打印全部内容

awk常用的内置变量
$0:打印所有内容
$n:处理行的第几列
NR:处理行的行号
NF:处理当前行的字段个数 $NF就表示最后一个字段
FS:列分隔符,指定文本的分隔符,和F作用一致。-F:FS=“:”
OFS:输出文本的分隔符
RS:指定分隔符为回车
内置变量 $ n 要加 $ ,其他内置变量不用加 $,更不能用引号,也不能用括号,否则会被当成字符串来处理。

awk '0{print}' test.txt   (默认是1,打印所有,0是不打印)
awk ‘{printf NR}’ test.txt  (只打印行号)
awk '{printf NR , $0 }' test.txt (打印行号和全部内容)
awk 'NR = =2   ,NR== 4{printf}'  test.txt   (逗号是和,分号是到)

奇偶打印

awk ‘NR%2 ==0{print}'      test.txt
awk 'NR%2 ==1{print}'      test.txt
计算(自带支持加减乘除),可以支持小数运算
awk ‘BEGIN{printf   10+2}’

awk的内置函数:getline
1、如果getline左右没有重定向符号(<,>)或者没有管道符(|)时候,awk会先读第一行,但是如果你加了getline,跳过第一行,读取第二行
2、如果两边有重定向或者管道符,getline左右于定向符或者管道符,getline作用于定向输入文件

ls | awk ‘{getline text.txt;print $0 , test.txt}'
getline test.txt 自定义的变量
ls输出的结果传送给test.txt	
打印ls命令的输出结果
如果没有结果,打印空,不做任何操作

文本内容过滤进行打印
BEGIN模式:
awk ‘BEGIN{…};{…};’ 文件
在对文件操作之前,会先执行 BEGIN{…}的条件,或者是命令操作,中间的{…}是真正的用于处理文件的命令
END{…}是结束语句,一般都是打印执行结果
awk ‘BEGIN{i=0};{i++};END{print i}’ /etc/passwd

awk条件判断打印
取反然后用感叹号
awk支持条件判断语句if
三元表达式:是类似于JAVA的
awk ‘(条件表达式)? (A表达式或者值):(B的表达式或者值);’
?的意思是if :的意思是else
awk的精确筛选
$ 3> $4

 ><=比较数值
 $n~“字符串”:表示第n个字段包含某人字符
 $n!~"字符串":表示第n个字段不包含某个字符
 $n=="字符串":表示第n个字段就是某个字符
 $n!=="字符串" :表示第n个字段不是某个字符
 $NF:最后一个字段
 awk -F : '$7~"bash" {print   $1,$NF}'  /etc/passwd

你可能感兴趣的:(linux,服务器,bash)