壳牌编程三剑客之awk

  

awk工具

  

在Linux/UNIX系统中,awk是一个功能强大的编辑工具,逐行读取输入文本,并根据指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互的情况下实现相当复杂的文本操作,被广泛应用于Shell脚本,完成各种自动化配置任务。
<强> awk常见用法
通常情况下awk所使用的命令格式如下所示,其中,单引号加上大括号“{}”用于设置对数据进行的处理动作.awk可以直接处理目标文件,也可以通过“- f”读取脚本对目标文件进行处理。
awk比较倾向于将一行分成多个”字段“然后再进行处理,且默认情况下字段的分隔符为空格或者tab键.awk执行结果可以通过打印的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符“,和”,表示“与”、“| |”表示“或”、“!”表示“非”;还可以进行简单的数学运算,如+、-、*、/?,^分别表示加,减,乘,除,取余和乘方。
<强> awk的常见格式

  
  

awk选项的模式或条件{编辑指令}的文件1文件2//过滤并输出文件符条件的内容
awk - f脚本文件文件1文件2//从脚本中调用编辑指令,过滤并输出内容

     

awk - f”:“{打印$ 1、$ 3 $ 4}"/etc/passwd//查找出/etc/passwd的用户名,用户ID,组ID等列
翱桥票喑倘?椭產wk

  

awk从输入文件或者标准输入中读入信息,与sed一样,信息的读入也是逐行读取的。不同的是awk将文本文件中的一行视为一个记录,而将一行中的某一部分(列)作为记录中的一个字段(域)。为了操作这些不同的字段,awk借用壳中类似于位置变量的方法,用$ 1,$ 2,3美元?顺序地表示行(记录)中的不同字段。另外awk用$ 0表示整个行(记录)。不同的字段之间是通过指定的字符分隔.awk默认的分隔符是空格.awk允许在命令行中用“- f分隔符”的形式来指定分隔符。

  

awk包含几个特殊的内建变量:

  
  

FS:指定每行文本的字段分隔符,默认为空格或制表位。
NF:当前处理的行的字段个数。
NR:当前处理的行的行号(序数)。
$ 0:当前处理的行的整行内容。
$ n:当前处理行的第n个字段(第n列)。
文件名:被处理的文件名。
RS:数据记录分隔,默认为\ n,即每行为一条记录。

     

awk用法示例:

  

<强> 1),按行输出文本
awk的NR==1, NR==3{打印}"/etc/passwd//输出/etc/passwd文件的一到三行
翱桥票喑倘?椭產wk”
awk - f”:“' NR==1, NR==3{打印$ 1、$ 3}/etc/passwd//输出/etc/passwd文件的一到三行的第一与第三字段
翱桥票喑倘?椭產wk”
awk - f”:“”(NR>=1),和(NR<=3){打印$ 1、$ 3}"/etc/passwd//输出/etc/passwd文件的一到三行的第一与第三字段
翱桥票喑倘?椭產wk”
awk - f”:“' NR % 2==1{打印$ 1、$ 3}’/etc/passwd//输出/etc/passwd文件奇数行的第一与第三字段
翱桥票喑倘?椭產wk”
awk - f”:“' NR % 2==0{打印$ 1、$ 3}"/etc/passwd//输出/etc/passwd文件偶数行的第一与第三字段
翱桥票喑倘?椭產wk”
awk/etc/passwd根/{打印}' '/^//输出以根开头的行
翱桥票喑倘?椭產wk”
awk的开始{x=0};/\/bin \/bash美元/{x + +}, {x}打印结束的/etc/passwd//统计以/bin/bash结尾的行数
翱桥票喑倘?椭產wk”
awk - f”:“' 3美元==?“{打印}"/etc/passwd//以冒号为分隔输出/etc/passwd文件中第3字段为0的行
翱桥票喑倘?椭產wk”
awk - f”:“' 3美元==?“{打印$ 1、$ 7}"/etc/passwd//以冒号为分隔输出/etc/passwd文件中第3字段为0的行的第一与第七字段
翱桥票喑倘?椭產wk”
awk - f:“7美元~“bash"{打印}’/etc/passwd//输出以冒号分隔且第7个字段包含bash的行

壳牌编程三剑客之awk