文本处理三剑客之awk——从入门到放弃

awk是文本处理三剑客之首,功能及其强大且支持正则表达式(包括基础正则和拓展正则)。

awk支持(三剑客都支持)以文件作为操作对象,以及从标准输出里面接受内容。

[[email protected] ~]# head /etc/passwd | awk -F ":" ‘{print $1}‘
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator

[[email protected] ~]# head /etc/passwd > test
[[email protected] ~]# awk -F ":" ‘{print $1}‘ test
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator



想要学会awk首先需要知道的几个基础概念:

awk的格式

awk指令是由模式、动作或者模式和动作组合而成。

[[email protected] ~]# awk ‘/root/{print $0}‘ test
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

以上命令的/root/——就是属于awk的模式,模式的含义是匹配root。

{print $0} ——就是动作,答应出匹配行的整行内容。

FS含义——field separator——字段分隔符

[[email protected] ~]# awk -F ":" ‘{print $1}‘ test
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator

命令行中的-F——指定分隔符,“:”——以冒号为分隔符号。

NR含义——number of record——记录的编号,也就是行号。

要知道记录的编号的含义首先需要知道awk的执行过程——awk在执行过程中以行为处理单位,如果第一行满足模式的要求就执行动作,如果不满足就继续读取下一行。

[[email protected] ~]# awk ‘NR>=1&&NR<=4 {print $0}‘ test
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

含义:如果行号NF大于等于1小于等于4,打印其内容。

NF——number of feild——字段数量

要使用NF首先必须指定-F选项来指定分隔符号,awk也只有这一个选项。

[[email protected] ~]# awk -F ":" ‘{print $7}‘ test
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin

$7——就是指的由分隔符分开后的第七个字段。

实现相同的功能还可以:

[[email protected] ~]# awk -F ":" ‘{print $NF}‘ test
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin

这里的NF就等于7——字段的数量。



实例:使用awk实现本机ip的取出

[[email protected] ~]# ip a | awk -F "[ /]+" ‘/inet.*ens33/ {print $3}‘
192.168.27.100

/inet.*ens33/——匹配特定行

[[email protected] ~]# ip a | awk ‘/inet.*ens33/ {print $0}‘
    inet 192.168.27.100/24 brd 192.168.27.255 scope global ens33

print $3——打印分隔后的第三个字段

【 /】+——分隔符的定义。

实例:取出访问日志文件的ip,并显示访问次数,且排序。

[[email protected] ~]# awk -F " " ‘{ken[$1]++}END{for (i in ken) print ken[i],i}‘  access.log  | sort -rn | head
1461 124.200.101.50
825 43.252.231.204
106 183.17.230.63
48 210.22.98.114
37 61.158.146.81
27 23.100.232.233
20 61.129.8.179
20 101.227.139.161
17 61.151.178.197
17 61.151.178.177

原文地址:https://www.cnblogs.com/getbird/p/11178405.html

时间: 2024-11-08 21:01:51

文本处理三剑客之awk——从入门到放弃的相关文章

漫漫运维路——文本处理三剑客之awk基础

awk即gawk,是一款在Linux中实现文本格式化输出的文本处理工具,在Linux中与文本过滤工具grep和文本行编辑器sed共同组成Linux中的文本处理三剑客. awk在处理文本时以行为单位,读入整行数据后以指定的分隔符对行进行切片,然后再针对切片后的数据进行处理.如下图所示: 文本经过指定的分隔符进行切片后再对每一片进行处理,然后在根据设定的动作对处理后的文本执行动作,而切片后的文本如果只想引用一部分也可以使用变量进行引用,其引用的各个变量如下表所示: 变量 指代 $0.$N 当前处理行

文本处理三剑客之awk(报告生成器)

文本处理三剑客之awk(报告生成器) awk是一款强大的报告生成器,不同于sed和grep,它的侧重点是如何把文本信息更好的展示出来,常用与统计和格式化输出.awk相当于微型的shell,有着自己一套语法结构,例如:循环结构,数组,条件判断,函数,内置变量等功能. awk在我认为简直就是文本处理时打劫放火一大利器. 例如取出/etc/passwd中的第一列. [root@CentOS6 ~]# awk -F: '{print $1}' /etc/passwd root bin daemon ad

Liunx文本处理三剑客之awk

AWK是Aho, Weinberger, Kernighan三个开发者的首字母,最早用于Unix中,后用于Liunx中称为gawk(GUN awk),是Linux中文本处理三剑客之一,它是一个报告生成器,可以格式化文本并输出.下面所说的awk即gawk,那么我们一块来看一awk常用的用法: gawk - pattern scanning and processing language 字面翻译为:模式扫描及处理语言.也可以说他是一个简单的编程语言.工作原理如下: 按行读取文本,并根据指明输入时用

Linux系统文本处理三剑客之awk

GNU awk: 文本处理三剑客:grep,sed,awk grep,egrep,fgrep:文本过滤工具:pattern sed:行编辑器 模式空间.保持空间 awk:报告生成器,格式化文本输出 gawk - pattern scanning and processing language 基本用法:gawk [options] 'program' FILE ... program:PATTERN{ACTION STATEMENTS} 语句之间用分号分隔 print,printf 选项: -F

文本处理三剑客之一----------awk

简单的说awk是一门类似于shell的编程语言,是一种强大的文本处理工具,它的设计思想来源于 SNOBOL4 .sed .Marc Rochkind设计的有效性语言.语言工具 yacc 和 lex ,当然还从 C 语言中获取了一些优秀的思想. 它有着属于自己的独特的语法表达方式,虽然操作可能会比较复杂,但是语法格式始终都是: awk [options] 'program' file- program: {pattern + action}' 或者  'pattern {action}' patt

文本处理三剑客之AWK

AWK的基本格式:    awk [options] 'program' file-          注释:     program->pattern{action statements;..}    pattern和action:    pattern部分决定动作语句何时触发及触发事件 (BEGIN,END)    action statements对数据进行处理,放在{}内指明 (print, printf) awk工作原理: 第一步:执行BEGIN{action;- }语句块中的语句 第

Linux基础(20)文本处理三剑客之awk

awk是比sed更强大的文本处理工具,sed通常是以一整行为处理单位,而awk则可以按照指定的分隔符将一整行分为多个字段单独进行处理. awk的语法 awk -F separator 'BEGIN{command}condition1{command1}condition2{command2}...END{command}' filename #除了处理filename之外 awk也以处理标准输入 -F 指定分隔符,默认是空格符 例如如果指定:为分隔符,则可以这样-F: BEGIN用于指定在处理

Linux文本处理三剑客之awk详解

前言 awk是一款强大的报告生成器,不同于sed和grep,它的侧重点是如何把文本信息更好的展示出来,常用与统计和格式化输出.awk相当于微型的shell,有着自己一套语法结构,例如:循环结构,数组,条件判断,函数,内置变量等功能.处理对象一般纯文本文件或纯文本信息. 用法详解 基本语法 awk [options] 'program' file file ... awk [options] 'PATTERN{action}' file file ... -F CHAR:输入分隔符 awk的输出

Linux文本处理三剑客之awk(一)

  AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一.其名称得自于它的创始人阿尔佛雷德·艾侯.彼得·温伯格和布莱恩·柯林汉姓氏的首个字母.awk经过改进生成的新的版本nawk,gawk,现在默认linux系统下日常使用的是gawk.灵活的应用awk能够让我们的日常运维工作效率得到很大的提高. 一.基本用法: awk [options] 'program' var=value file- awk [options] -f programfile var=