shell脚本文本三剑客--awk

一、awk概述:

  • AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
  • AWK是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描、过滤、统计汇总工作。用来处理列
  • 数据可以来自标准输入也可以是管道或文件。

二、awk格式:

awk 【选项】 '模式条件{处理动作}'   处理文件..
                      print

1.选项:

-F 指定分隔符
-v 自定义变量

2.常见的内置变量:

  • FS∶ 列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同
  • NF∶ 当前处理的行的字段个数。
  • NR∶ 当前处理的行的行号(序数)。
  • $0∶当前处理的行的整行内容。
  • $n∶ 当前处理行的第n个字段(第n列)。
  • FILENAME∶ 被处理的文件名。
  • RS∶ 行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理。预设值是’\n’
  • $NF:最后一段
  • $(NF-1):倒数第二段

3.条件模式:

   BEGIN语句块 (开始)     END语句块 (结束)    模式匹配的通用语句块 

三、awk基础四用法:

1.打印字符串:

awk '{print "hello"}'    #打印字符串

shell脚本文本三剑客--awk_第1张图片

2.计算:

awk 'BEGIN{print 5+5}'

shell脚本文本三剑客--awk_第2张图片

shell脚本文本三剑客--awk_第3张图片 

3.指定条件行:

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

 

4.指定分隔符打印列:

df | awk '{print $5}'   #打印内容的第五列

shell脚本文本三剑客--awk_第4张图片

awk -F: '{print $1,$3}' /etc/passwd |head

shell脚本文本三剑客--awk_第5张图片

    打印出的内容以“-”  为分隔符。shell脚本文本三剑客--awk_第6张图片

 

5.BEGIN END 模式:

 先处理BEGIN的指定动作,再处理文本,最后执行END模式的指定动作。

awk 'BEGIN {x=0};/\/bin\/bash$/;{x++};END{print x}' /etc/passwd 
awk 'BEGIN {x=0};/\/bin\/bash$/ {x++;print x,$0};END{print x}' /etc/passwd

shell脚本文本三剑客--awk_第7张图片

 

四、常见的内置变量用法:

  1.FS:

awk -v FS=':' '{print $1FS$3}' /etc/passwd | head

awk -F:  '{print $1":"$3}' /etc/passwd | head  一样效果

shell脚本文本三剑客--awk_第8张图片

 shell脚本文本三剑客--awk_第9张图片

2.RS:

echo $PATH | awk -v RS=':' '{print $0}'

shell脚本文本三剑客--awk_第10张图片

 

3.NF:

awk -F: '{print $NF}' /etc/passwd| head   #打印最后一列


awk -F: '{print $(NF-1)}' /etc/passwd| head #倒数第二列

shell脚本文本三剑客--awk_第11张图片

shell脚本文本三剑客--awk_第12张图片

 

4.NR:

df | awk 'NR==2{print $5}'          #指定打印行数

awk 'NR==1,NR==3{print}' passwd     #打印出1到3 行

awk 'NR==1||NR==3{print}' passwd    #打印出1和3行

awk '(NR%2)==0{print NR}' passwd    #打印出函数取余数为0行

awk '(NR%2)==1{print NR}' passwd    #打印出函数取余数为1的行

shell脚本文本三剑客--awk_第13张图片

 

五、实际案例:

  1.提取主机名并放入原文件:

 cat 1.txt | awk -F[/.] '{print $3}' >>1.txt

shell脚本文本三剑客--awk_第14张图片

 2.查出/tmp的权限,以数字方式显示

stat /tmp/|awk -F'[(/]' 'NR==4{print $2}'

shell脚本文本三剑客--awk_第15张图片

 

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