首页 > 其他 > 详细

awk

时间:2019-08-22 09:42:26      阅读:96      评论:0      收藏:0      [点我收藏+]

1.awk介绍    

默认情况下不编辑源文件  报告生成器--通过模式匹配以及自己本身的语言格式,来获取并输出客户所需要的内容;

eg:获取系统上面用户ID大于等于1小于等于500的用户的用户名和用户ID

for i in $(cut -d:-f3/etc/passwd);do

if [ $i -ge 1 -a $i -le 500 ];then

echo grep $i | cut -d:-f1,3

fi

done

-------------------------------------------

#awk -F:’{if($3>=1&&$3<=500){print $3}}’ /etc/passwd

2.awk工作原理  

 技术分享图片

 

3.awk的用法

 awk [option]... ‘program’FILE...

  1. program 必须使用!单引号!
  2. 多条program语句使用大括号包含起来可以并列可以嵌套

awk’{print} /etc/passwd’

4.awk的常见option

-F  指定分隔符

awk -F[/:]’{print $1 $3}’a.txt 其中[ ]内表示多个字符中的任意一个

-v  因为awk是一种语言编译器,能够自己定义变量,同时也有内置变量(与环境变量类似)手动指定变量参数

awk-v a=”a/b” ‘{print a}’ a.txt

a赋值打印a这个变量

1、a是自定义变量 -v FS=”.”

2、awk中调用变量不用加$符号

扩展:了解cutawk的区别

5.awk语法格式--program

1print

 默认输出(在屏幕上)

awk中没有保存命令,我们可以关联别的命令来保存awk的结果;

 awk ‘{a="a/b";print a}‘ a.txt | tee a.bak

 2printf  -- 实现格式化输出

 printf "%s%d班学的最好的学生",变量1,变量2  

【仅仅只有顺序关系】

   格式符

%s   字符串

 %d  %i  数值

 %e  %E  科学计算数值

 %c  ACSii码值

 %f   浮点数

%u  无符号整数

%%  逃逸符 只显示 % 自己

         修饰符

默认为右对齐

-  代表左对齐

%5.4f   

5  所占位数

4  所取小数位

 awk ‘/^UUID/{printf "被挂载文件:%-50s  挂载点:%-10s  文件系统格式:%-10s\n",$1,$2,$3}‘ /etc/fstab

 注意:这里提到了地址定界

 sed /PAT1/,/PAT2/

 3、变量(内置变量、自定义变量)

内置变量 -- 环境变量(bash(envset -C +C)

 awk语言所默认支持的变量

FS   定义输入分隔符的变量

OFS   定义输出分隔符的变量

 NF  定义行分隔以后的参数个数 ($NF 分隔以后最后的一列变量)

*变量引用的时候,不用加$$0,$1...$n

 awk -v FS=":" ‘/\/bash$/{print $1,$NF}‘ /etc/passwd

 NR  定义文件的行数,定义多个文件的文件的,行号叠加

 FNR  文件只计算自己的行号

 awk ‘{print NR}‘ /etc/fstab /etc/passwd

 awk ‘{print FNR}‘ /etc/fstab /etc/passwd

 FILENAME 存储文件的名字

 awk ‘{print FILENAME}‘ /etc/passwd   //把文件名打印N次,N文件的行数

 awk ‘BEGIN{print FILENAME}‘ /etc/passwd   //BEGIN{语句} 只在行循环开始时,执行一次;

 ARGC  整个命令的 段数  【注意:不包含 ‘program‘ 本身】

 ARGV  数组,用来调取命令中,指定的段 ARGV[2]  【注意:数组中也不包含 ‘program‘

 awk ‘BEGIN{print ARGC}‘ /etc/passwd /etc/fstab /etc/shadow

 awk ‘BEGIN{print ARGV[3]}‘ /etc/passwd /etc/fstab /etc/shadow

 RS   指定换行符 \n 可以指定新的换行符,不影响本身的换行

 ORS   输出的时候指定的换行符,将默认换行符替换为指定字符

 awk -v RS=" " ‘{print}‘ /etc/passwd

awk -v ORS=" " ‘{print}‘ /etc/passwd  //可以用来取消换行

 自定义变量

 -v 变量=

在后面‘program‘中去调用自定义变量时,直接使用即可

 或者将 “变量=值”语句直接写在‘program‘亦可;

 awk -v a="a/b" ‘{print a}‘ a.txt

awk ‘{a="a/b";print a}‘ a.txt

 4、模式匹配(地址定界)

 5、操作符

 6、常见action

7、常见语言(if while do for break continue delete switch

 8、数组

9、函数

awk

原文:https://www.cnblogs.com/bishuyu/p/11392330.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!