Linux三剑客之awk命令详解

目录

一、awk常见用法

二、案例

        2.1、awk中-F的使用

        2.2、awk中几个特殊的内部变量

        用法:

 三、实战案例


一、awk常见用法

        通常情况下awk所使用的命令格式如下,其中,单引号家伙是那个大括号“{ }”用于设置对于数据进行的处理动作。awk可以直接处理目标文件,也可以通过“-f”读取脚本对目标文件进行处理。

awk 选项 '模式或条件{编辑指令}' 文件1 文件2  #过滤并输出文件中符合条件的内容

awk -f 脚本文件 文件1 文件2  #从脚本中调用编辑指令,过滤并输出内容

        它与sed命令有一些不同,sed常用于一整行的处理,二awk比较倾向于将一行分成多个“字段”然后再进行处理,awk命令的过程中,可用使用逻辑操作符“&&”表示“与”、“||”表示“或”、“!”表示“非”;还可以进行简单的数学运算。

二、案例

        2.1、awk中-F的使用

cat /etc/passwd | awk -F ".' "{print $1,$3,$4}''

#以":"为分隔符,输出1,3,4列内容

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

        2.2、awk中几个特殊的内部变量

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

        用法:

cat /etc/passwd | awk '{print}'  #输出所有内容  或者  '{print $0}'

cat /etc/passwd | awk 'NR==1,NR==3{print}' #输出第1~3行内容 

cat /etc/passwd | awk '(NR<=3)$$(NR>=1){print}'

  

 cat /etc/passwd | awk 'NR==1||NR==3{print}' #输出1、3行的内容

nl /etc/passwd | awk '(NR%2)==1{print}'  #输出奇数行(为了更好的可视化,这里用nl)

 nl /etc/passwd | awk '(NR%2)==0{print}'   #输出偶数行

 三、实战案例

58.87.87.99 - - [09/Jun/2020:03:42:43 +0800] "POST /wp-cron.php?doing_wp_cron=1591645363.2316548824310302734375 HTTP/1.1" ""sendfileon
128.14.209.154 - - [09/Jun/2020:03:42:43 +0800] "GET / HTTP/1.1" ""sendfileon
64.90.40.100 - - [09/Jun/2020:03:43:11 +0800] "GET /wp-login.php HTTP/1.1"""sendfileo

要输出时间和IP

cat 1.txt  | awk -F"[ []" '{print$1,$5}'

awk -F: 'BEGIN{a=0};$3%2==0 && /\/sbin\/nologin/{print NR,$0} END{print a}' /etc/passwd 

 

 

  • 23
    点赞
  • 250
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
1. 前言 这是一本awk学习指引, 其重点着重于 :  awk 适于解决哪些问题 ?  awk 常见的解题模式为何 ? 为使读者快速掌握awk解题的模式及特性, 本手册系由一些较具代表性的范例及其题解所构成; 各范例由浅入深, 彼此间相互连贯,范例中并对所使用的awk语法及指令辅以必要的说明. 有关 awk的指令, 函数,...等条列式的说明则收录于附录中, 以利读者往后撰写程序时查阅. 如此编排, 可让读者在短时间内顺畅地学会使用awk来解决问题. 建议读者循着范例上机实习, 以加深学 习效果. 读者宜先具备下列背景 : [a.] UNIX 环境下的简单操作及基本概念. 例如 : 文件编辑, 文件复制 及 管道, 输入/输出重定向 等概念 [b.] C 语言的基本语法及流程控制指令. (awk 指令并不多, 且其中之大部分与 C语言中之用法一致, 本手册中对该类指令之语法及特性 不再加以繁冗的说明, 读者若欲深究,可自行翻阅相关的 C 语言书籍) 2. awk概述 为什么使用awk awk 是一种程序语言. 它具有一般程序语言常见的功能. 因awk语言具有某些特点, 如 : 使用直译器(Interpreter)不需先行编译; 变量无类型之分 (Typeless), 可使用文字当数组的下标(Associative Array)...等特色. 因此, 使用awk撰写程序比起 使用其它语言更简洁便利且节省时间. awk还具有一些内建功能, 使得awk擅于处理具数据行 (Record), 字段(Field)型态的资料; 此外, awk内建有pipe的功能, 可将处理中的数据传送给外部 的 Shell命令加以处理, 再将Shell命令处理后的数据传回awk程序, 这个特点也使得awk程序很 容易使用系统资源. 由于awk具有上述特色, 在问题处理的过程中, 可轻易使用awk来撰写一些小工具; 这些小工具 并非用来解决整个大问题,它们只扮演解决个别问题过程的某些角色, 可藉由Shell所提供的pipe 将数据按需要传送给不同的小工具进行处理, 以解决整个大问题. 这种解题方式, 使得这些小工 具可因不同需求而被重复组合及重用(reuse); 也可藉此方式来先行测试大程序原型的可行性与 正确性, 将来若需要较高的执行速度时再用C语言来改写.这是awk最常被应用之处. 若能常常 如此处理问题, 读者可以以更高的角度来思考抽象的问题, 而不会被拘泥于细节的部份. 本手册为awk入门的学习指引, 其内容将先强调如何撰写awk程序,未列入进一步解题方式的应 用实例, 这部分将留待UNIX进阶手册中再行讨论.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值