目录 1.awk的基本格式 2.awk中的变量 3.操作符

一.awk的基本格式

  •   awk [options] 'program' file… 
    
  •   	   program:pattern{action statements;..}
    
  •   	 	           pattern和action:
    
  •   	             	 •pattern部分决定动作语句何时触发及触发事件 BEGIN,END 
    
  •   		             • action statements对数据进行处理,放在{}内指明 print, printf 
    
  •   	** 分割符、域和记录** 
      	   awk执行时,由分隔符分隔的字段(域)标记$1,$2..$n称 为域标识。$0为所有域。
      		 文件的每一行称为记录。
      		 省略action,则默认执行 print $0 的操作。
    
  •   **	工作原理**
    
  1.  	   第一步:执行BEGIN{action;… }语句块中的语句 
    
  2.  		 第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ action;… }语句块,它逐行扫描文件,从第一行到最后一行重复这 个过程,直到文件全部被读取完毕。 
    
  3.  		 第三步:当读至输入流末尾时,执行END{action;…}语句块 
     **  print格式:**
     	      print item1, item2, ...
     				要点
     				    1.逗号分隔符 
     				    2. 输出的各item可以字符串,也可以是数值;当前记录的字段、 变量或awk的表达式 
     				    3. 如省略item,相当于print $0 
     **		printf**
     		   格式化输出:printf “FORMAT”, item1, item2, ...
     			 (1) 必须指定FORMAT 
     			 (2) 不会自动换行,需要显式给出换行控制符,\n
     			 (3) FORMAT中需要分别为后面每个item指定格式符 
     		     	 **格式符:与item一一对应**
     			       %c: 显示字符的ASCII码
     						 %d, %i: 显示十进制整数 
     						 %e, %E:显示科学计数法数值
     						 %f:显示为浮点数 %g,
     						 %G:以科学计数法或浮点形式显示数值
     						 %s:显示字符串
     						 %u:无符号整数 
     						 %%: 显示%自身 
     	**修饰符**
     					: #[.#]:第一个数字控制显示的宽度;第二个#表示小数点后精度,%3.1f
     					-: 左对齐(默认右对齐) %-15s
     					+:显示数值的正负符号 %+d
    

二.awk中的变量

  •    1.内置变量
    
  1.          FS:输入字段分隔符,默认为空白字符 
    
  2.  				 OFS:输出字段分隔符,默认为空白字符 
    
  3.  				 RS:输入记录分隔符,指定输入时的换行符,原换行符仍有效 
    
  4.  				 ORS:输出记录分隔符,输出时用指定符号代替换行符
    
  5.  				  NF:字段数量 
    
  6.  					NR:行号 
    
  7.  					FNR:各文件分别计数,行号 
    
  8.  					FILENAME:当前文件名 
    
  9.  					ARGC:命令行参数的个数 
     			2.自定义变量
     			    -v var=value 
     					在program中直接定义 
    

三.操作符

 *   算术操作符: *
			        x+y, x-y, x*y, x/y, x^y, x%y
							-x: 转换为负数 
							+x: 转换为数值 
			字符串操作符:没有符号的操作符,字符串连接 

** 赋值操作符** ++ 变量加1 -- 变量减1 +=将加的结果赋给变量 -= 将减的结果赋给变量 *= 将乘的结果赋给变量 /+ 将除的结果赋给变量 %= 将取模的结果赋给量 ^= 将取幂的结果赋给变量

比较操作符:

  •     == 等于
    
  •    != 不等于
    
  •   	 >  大于
    
  •   	 > = 大于等于
    
  •   	 < 小于
    
  •   	 <= 小于等于
    

模式匹配符: ~:左边是否和右边匹配包含 !~:是否不匹配

			例子  
			  
			           [root@centos6 ~]# cat /etc/passwd
						root:x:0:0:root:/root:/bin/bash
						bin:x:1:1:bin:/bin:/sbin/nologin
						daemon:x:2:2:daemon:/sbin:/sbin/nologin
						adm:x:3:4:adm:/var/adm:/sbin/nologin
						lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  •   	只取前三行
    
		           [root@centos6 ~]# cat /etc/passwd | awk 'NR<=3{print}'
												root:x:0:0:root:/root:/bin/bash
												bin:x:1:1:bin:/bin:/sbin/nologin
												daemon:x:2:2:daemon:/sbin:/sbin/nologi
  •   		只取出用户名 格式为  name  用户名
      		     
      				     [root@centos6 ~]# cat /etc/passwd | awk -F: ' NR<=3{ print "name", $1 }'
      													name root
      													name bin
      													name daemon
    
  •   		取出用户名及其uid 格式为  name:用户名     uid:XXX
      		
      			[root@centos6 ~]# cat /etc/passwd | awk -F: ' NR<=3{ printf "name: %-10s uid: %s\n", $1,$3}‘
      											name: root       uid: 0
      											name: bin        uid: 1
      											name: daemon     uid: 2
    
  •   取出用户root的信息 
      	
      	      [root@centos6 ~]# cat /etc/passwd | awk -F: ' $1~"root"{ print $0}'
      												root:x:0:0:root:/root:/bin/bash