[Linux] awk详解

awk命令形式:

awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file

 [-F|-f|-v]   大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value

 

'  '          引用代码块

BEGIN   初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符

//           匹配代码块,可以是字符串或正则表达式

{}           命令代码块,包含一条或多条命令

;          多条命令使用分号分隔

END      结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息

 

pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。

awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。

通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。

 

 

实例一:只查看test.txt文件(100行)内第20到第30行的内容

awk '{if(NR>=20 && NR<=30) print $1}' test.txt  
awk '(NR>=20 && NR<=30) {print $1}' test.txt  

   if语句必须在{}里面 

实例二:过滤ip,使用分隔符

[root@moke oldboy]# cat oldboy.txt 
inet addr:10.0.0.8 Bcast:10.0.0.255 Mask:255.255.255.0
[root@moke oldboy]# awk -F"[ :]+" '{print $3,$5,$7}' oldboy.txt 
10.0.0.8 10.0.0.255 255.255.255.0

实例三:判断是否目录

[root@moke data]# ls -l
总用量 8
drwxr-xr-x 2 root root 198 12月  8 21:38 a
-rw-r--r-- 1 root root  65 12月  8 22:06 a.txt
-rw-r--r-- 1 root root  33 12月  8 22:03 b.txt
[root@moke data]# ls -l |awk '{if($2>1) print $0}' 
drwxr-xr-x 2 root root 198 12月  8 21:38 a

awk默认分隔符为空格,$0输出整行, print &NF(表示结尾一列)

 

 

 

 

 

https://www.cnblogs.com/xudong-bupt/p/3721210.html

posted @ 2018-12-03 11:51  Moke丶青  阅读(106)  评论(0编辑  收藏  举报