awk工具(三剑客)

1、awk介绍:

awk:(三剑客之一)

awk:是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk则更支持分段,默认会以空格为分隔符将每行分段,对分段分析处理(匹配 查找 )

awk的版本:

awk:主要有三个版本:awk(GPL版本)  nawk(new 增强版)   gawk(GUN版本)

2、awk的基本用法:

2.1:打印指定内容(指定段):

[[email protected] awk]# awk -F ':' '{print $1}' test.txt      # -F参数用来指定文件分隔符,默认是以空格为分隔符:
root
bin
daemon
adm

注意:默认以文件内容里空格为分隔符打印:

打印整个文本文档:使用 "$0"  则打印整个文本:

[[email protected] awk]# awk '{print $0}' test.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

也支持同时打印多个段落,支持手动指定分隔符:打印后的内容默认空格为分隔符显示

[[email protected] awk]# awk  -F ':' '{print $1,$2,$3}' test.txt     #默认则以空格为分隔符:    
root x 0
bin x 1
daemon x 2

也支持对打印后的文件手动指定分隔符:如下:对打印后的内容手动指定分隔符“#”并显示:

[[email protected] awk]# awk  -F ':' '{print $1"#"$2"#"$3}'   test.txt         #手动对打印后的内容分隔符以"#"为分隔符显示:
root#x#0
bin#x#1
daemon#x#2
adm#x#3

注意:指定分隔符后该命令只识别指定的分隔符,如果莫行无指定分隔符,则会打印整行:

2.2:awk的匹配功能(用 "~" 来表示匹配)

针对数学表达式的用法

  • 数值比较
当'$3>=1000 {print $1}'时:
[[email protected] awk]# awk -F ':' '$3>=1000 {print $1}' test.txtuser001

当'$3>="1000" {print $1}'时:
[[email protected] awk]# awk -F ':' '$3>="1000" {print $1}' test.txt |head -3daemon
adm
lp

匹配字符串:
[[email protected] awk]# awk -F ':' '$7!="/sbin/nologin" ' test.txt root:x:0:0:root:/root:/bin/bashsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltuser001:x:1000:1000::/home/user001:/bin/bash“!=”表示不等于

说明: 当“1000”加引号时会被当做是字符串,以ASC码(二进制)的方式进行计算处理,不加引号的时候会被当做是数值处理。

[[email protected] awk]# head -n3 test.txt |awk -F ':' '{OFS=":"} $1="root"'root:x:0:0:root:/root:/bin/bashroot:x:1:1:bin:/bin:/sbin/nologinroot:x:2:2:daemon:/sbin:/sbin/nologin[[email protected] awk]# awk -F ':' '$3=="0" {print $1}' test.txtroot

说明: 当使用一个“=”等号时表示为等号前面字符赋值,使用两个“==”表示逻辑关系(进行判断)。

9.7 awk 命令(下)

  • 字符比较大小
[[email protected] awk]# awk -F ':' '$3<$4' test.txtadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinmail:x:8:12:mail:/var/spool/mail:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

[[email protected] awk]# awk -F ':' '$3==$4' test.txt |head -3root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin[[email protected] awk]# awk -F ':' '$3>"5" && $3<"7"' test.txt shutdown:x:6:0:shutdown:/sbin:/sbin/shutdowntss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

说明: “&&”表示并且。

[[email protected] awk]# awk -F ':' '$3>1000 || $7!="/sbin/nologin"' test.txt root:x:0:0:root:/root:/bin/bashsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltuser001:x:1000:1000::/home/user001:/bin/bash[[email protected] awk]# awk -F ':' '$3>1000 || $7~/bash/' test.txt root:x:0:0:root:/root:/bin/bashuser001:x:1000:1000::/home/user001:/bin/bash

说明: “||”表示或者。

OFS指定打印时的分隔符

语法1:
[[email protected] awk]# awk -F ':' '{OFS="#"} $3>1000 || $7~/bash/ {print $1,$3,$7}' test.txt root#0#/bin/bashuser001#1000#/bin/bash语法2:
[[email protected] awk]# awk -F ':' '{OFS="#"} {if ($3>1000 || $7~/bash/) {print $1,$3,$7}}' test.txt root#0#/bin/bashuser001#1000#/bin/bash
  • NR (=number row)表示行号
[[email protected] awk]# awk -F ':' '$3<5 && $7!="/sbin/nologin" {print NR":"$1}' test.txt1:root[[email protected] awk]# awk -F ':' '$3<5 && $3>2 && $7=="/sbin/nologin" {print NR":"$1}' test.txt4:adm5:lp打印前三行:
[[email protected] awk]# awk -F ':' 'NR<=3' test.txtroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin[[email protected] awk]# awk -F ':' 'NR<=3 && $1~/root/' test.txtroot:x:0:0:root:/root:/bin/bash

注: 类似于grep -n。

  • NF (=number fragment)表示段数(列)
[[email protected] awk]# awk -F ':' '$3<5 && $3>2 && $7=="/sbin/nologin" {print NF":"$1}' test.txt7:adm7:lp
  • 求和
[[email protected] awk]#  awk -F ':' '{(tot=tot+$3)}; END {print tot}' test.txt5657


原文地址:http://blog.51cto.com/yuanhaohao/2062316

时间: 2024-10-17 14:36:08

awk工具(三剑客)的相关文章

Shell脚本编程与sed,awk工具的使用--9月15日课程作业

一.shell程序的运行原理 1.脚本 脚本或程序源文件是一种文本文件,将文本文件转换成机器指令有两种转换方式: 编译执行:预处理-->编译-->汇编-->链接:事先完成,结果:二进制程序文件 例如:C, C++ 解释执行:由解释器全程参与运行过程,每次读取一行,运行一行: 例如:  Python:程序控制结构,调用编程库完成程序编写: 库文件:功能模块,在编程中可调用: Bash:调用机器上命令程序文件进行程序编写: 外部命令:各应用程序提供: 2.原理 当shell运行一个程序时,会

grep,sed,awk工具的使用

grep过滤特定的行 1.把包含'halt'的行以及这行下面的两行都打印出来. [[email protected] ~]# cp /etc/passwd /tmp/ [[email protected] ~]# cd /tmp/ [[email protected] tmp]# grep -A2 'halt' passwd halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x

鸟哥书籍awk工具学习

awk工具 awk也是一个很好的数据处理工具.相比于sed常常作用于一整行的处理,awk则比较倾向于将一行分成数个字段来处理.因此,awk相当适合处理小型的数据.awk通常的运行模式是这样的: [[email protected] opt]#awk '条件类型1{动作1}条件类型2{动作2}' filename awk后面接两个单引号并加上大括号{}来设置想要对数据进行的处理动作.qwk可以处理后续接的文件,也可以读取来自前个命令的standardoutput.但如前面说的,awk主要是处理每一

文本工具三剑客:sed

文本工具三剑客:sedsde是一种流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓存区,称为 模式空间    用法:    sed [选项] [加自己的语言] [要处理的文件]    选项:        -n  不输出模式中的内容至屏幕            # sed -n "10p" f2 只打印出第10行匹配到的行 其他不显示            10  UUID=07a475f4-3d7a-4b27-9ec9-500bc8a19c4d /boot      

【转载】 AWK 工具简明介绍

有一些网友看了前两天的<Linux下应该知道的技巧>希望我能教教他们用awk和sed,所以,出现了这篇文章.我估计这些80后的年轻朋友可能对awk/sed这类上古神器有点陌生了,所以需要我这个老家伙来炒炒冷饭.况且,AWK是贝尔实验室1977年搞出来的文本出现神器,今年是蛇年,是AWK的本命年,而且年纪和我相仿,所以非常有必要为他写篇文章. 之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Family Nam

【转载】GAWK AWK工具使用手册

IBM GAWK入门资料http://www.ibm.com/developerworks/cn/education/aix/au-gawk/ AWK 是什么? 最简单地说,AWK 是一种用于处理文本的编程语言工具.AWK 实用工具的语言在很多方面类似于 shell 编程语言,尽管 AWK 具有完全属于其本身的语法.在最初创造 AWK 时,其目的是用于文本处理,并且这种语言的基础是,只要在输入数据中有模式匹配,就执行一系列指令.该实用工具扫描文件中的每一行,查找与命令行中所给定 内容相匹配的模式

2018.4.27 六周第三次课 (awk工具)

awk工具介绍 awk也是流行的编辑器,针对文档中的行来操作,一行一行的操作: awk具备sed的所有功能,而且更强大. awk截取文档中的某个段落,示例如下: -F选项的作用是指定分隔符,如果不加-F选项,以空格或者tab为分隔符. print为打印的动作,用来打印某个字段.$1为第一段,$2为第二段,$0表示整行. 示例1: [[email protected] ~]# mkdir awk #创建个awk目录[[email protected] ~]# cp /etc/passwd awk/

Shell脚本 (四)正则表达式 grep sed awk 工具

正则表达式定义正则表达式,又称正规表达式.常规表达式是使用单个字符串来描述.匹配一系列符合某个句法规则的字符串·正则表达式组成普通字符大小写字母.数字.标点符号及一些其他符号元字符在正则表达式中具有特殊意义的专用字符·基础正则表达式示例查找特定字符利用中括号[]来查找集合字符查找行首^与行尾字符$查找任意一个字符.与重复字符查找连续字符范围{}·基础正则表达式的常见元字符^.$...\..[ ].[^ ].[n1-n2].{n}.{n,}.{n,m}·####查找特定字符####n--表示显示行

Shell编程之正则表达式三剑客——awk工具

awk概述 在 Linux/UNIX 系统中,awk 是一个功能强大的编辑工具,逐行读取输入文本,并根据指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互的情况下实现相当复杂的文本操作,被广泛应用于 Shell 脚本,完成各种自动化配置任务. 1,awk常见用法 通常情况下 awk 所使用的命令格式如下所示,其中,单引号加上大括号"{}"用于设置对数据进行的处理动作.awk 可以直接处理目标文件,也可以通过"-f"读取脚本对目标文件进行