当前位置:网站首页>Shell:三剑客之awk

Shell:三剑客之awk

2022-08-11 05:36:00 人间若有一两风

一、awk的概述

awk:Aho, Weinberger, Kernighan,报告生成器,格式化文本输出,GNU/Linux发布的AWK目前由自由软件基金会(FSF)进行开发和维护,通常也称它为 GNU AWK

有多种版本:
AWK:原先来源于 AT & T 实验室的的AWK
NAWK:New awk,AT & T 实验室的AWK的升级版
GAWK:即GNU AWK。所有的GNU/Linux发布版都自带GAWK,它与AWK和NAWK完全兼容

二、工作原理和格式

1、工作原理

  • 当读到第一行时,匹配条件,然后执行指定动作,再接着读取第二行数据处理,不会默认输出
  • 如果没有定义匹配条件默认是匹配所有数据行,awk隐含循环,条件匹配多少次动作就会执行多少次

逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。

  • sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个""字段"然后再进行处理。
  • awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。
  • 在使用awk命令的过程中,可以使用逻辑操作符"

    &&“表示"与”、“||表示"或”、"!“表示非”;还可以进行简单的数学运算,如+、一、*、/、%、^分别表示加、减、乘、除、取余和乘方。

 

显示一个空格,空格需要用双引号引起来,如果不用引号默认以变量看待,如果是常量就需要双引号引起来

 

 

 

 

2、awk格式

格式:
awk [选项] ‘模式条件{操作}’ 文件1 文件2....
awk -f|-v 脚本文件 文件1 文件2.....

3、awk内置变量

FS:输入字段分隔符,默认为空格或制表位(tab)
OFS:输出字段的分割符(默认是空格)
RS:输入行分隔符
ORS:输出行的分割符,默认为换行符
NF:当前处理的行的字段个数
NR:当前处理的行的行号(序数)
FNR:读取文件的记录行号(从1开始,若读取新的文件依旧是从1开始)
$0:当前处理的行的整行内容
$n:当前处理行的第n个字段(第n列)
FILENAME:被处理的文件名

4、awk命令的用法

awk '{print}' passwd.bak      //输出所有内容,{print}与{print $0}等同

awk 'NR==1,NR==3{print}' passwd.bak           //输出1-3行的内容

awk '/^root/{print}' passwd.bak        //输出以root开头的行

 cat -n passwd.bak |awk '(NR%2==1){print}'       //输出文件的奇数行

cat -n passwd.bak |awk '(NR%2==0){print}'      //输出文件偶数行

原网站

版权声明
本文为[人间若有一两风]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_69278945/article/details/126268965