正则表达式 awk笔记

awk ‘条件类型1 {动作1}条件类型2{动作2}...‘ filename

NF 每一行($0)拥有的字段总数

NR AWK所处理的是某一行的数据

FS 输入字段分割字符,默认为空格

RS输入行分隔符

OFS输出字段分隔符

ORS输出行分隔符

FNR各自统计行

BEGIN 表示后面不带文件 只做演示

-F 分隔符

awk –v 设置变量

例:打印passwd文件中ID小于10的用户

cat /etc/passwd | awk -F":" ‘ $3<10 {print $1 "\t" $3}‘

计算出每个人的总额

[[email protected] ~]# cat aa | awk ‘NR==1{print $1,$2,$3,$4,"Total"}NR>=2{total=$2+$3+$4;print $1,$2,$3,$4,total}‘

Name 1st 2nd 3th Total

VBird 23000 24000 25000 72000

DMTsai 21000 20000 23000 64000

Bird2 43000 42000 41000 126000

[[email protected] ~]# awk -vtest="test" ‘BEGIN{print test}‘

Test

或者

[[email protected] ~]# awk‘BEGIN{test="test";print test}‘

Test

多个语句之间要用分号;隔开

Printf

[[email protected] ~]# awk -F : ‘$3>500{print $1,$3}‘ /etc/passwd

nfsnobody 65534

www 501

mysql 502

nagios 503

aaa 504

打印出passwd文件中ID大于500的用户

[[email protected] ~]# awk -F :‘$7~"bash$" {print $1,$7}‘ /etc/passwd

root /bin/bash

chen /bin/bash

nagios /bin/bash

打印出第七列以bash结尾的用户

awk -F : ‘$7!~"bash$" {print$1,$7}‘ /etc/passwd 取反

[[email protected] ~]# awk -F : ‘/^r/ {print$1,$7}‘ /etc/passwd

root /bin/bash

rpc /sbin/nologin

rtkit /sbin/nologin

rpcuser /sbin/nologin

去以r开头的行

[[email protected] ~]# awk -F : ‘/^r/,/^m/ {print$1,$7}‘ /etc/passwd 第一个r开头的行到第一个m开头的行

[[email protected] ~]# awk -F:‘$3==0,$7~"bash$"{print $1,$7}‘ /etc/passwd

root /bin/bash

取ID=0和第七列以bash结尾的行

[[email protected] ~]# awk -F:‘$3==0,$7~"nologin"{printf "%-10s%-10s%-20s\n",$1,$3,$7}‘/etc/passwd

root     0         /bin/bash

bin      1         /sbin/nologin

取第三列=0和第七列以nologin结尾的值打印$1 $3 $7 "%-10s%-10s%-20s\n"表示中间隔多少字符串

BEGIN/END awk执行前执行一次和awk执行后执行一次

[[email protected] ~]# awk -F: ‘BEGIN{print "username   ID   shell"}$3==0,$7~"nologin"{printf"%-10s%-10s%-20s\n",$1,$3,$7}‘ /etc/passwd

username    ID  shell

root     0         /bin/bash

bin      1         /sbin/nologin

AWK执行前 打印出三列的表头

[[email protected] ~]# awk -F: ‘BEGIN{print"username    ID  shell"}$3==0,$7~"nologin"{printf "%-10s%-10s%-20s\n",$1,$3,$7}END{print "End of file"}‘ /etc/passwd

username   ID   shell

root     0         /bin/bash

bin      1         /sbin/nologin

End of file

AWK执行后 打印出结束语

[[email protected] ~]# awk -F: ‘{if($1=="root") print $1 , "this is admin";else print$1,"no admin"}‘ /etc/passwd

root this is admin

bin no admin

daemon no admin

adm no admin

if语句 如果$1=root则显示$1为this isadmin 否则显示no admin

[[email protected] ~]# awk -F: -v sum=0 ‘{if($3>500) sum++}END{print sum}‘ /etc/passwd

5

-v 变量sum赋值为0 如果ID大于500 则sum+1 执行完成后显示sum的值

netstat -ant | awk‘/^tcp/{state[$NF]++}END{for (s in state) {print s,state[s]}}‘

查看TCP状态

[[email protected] ~]# awk‘{count[$1]++}END{for (ip in count) {print ip,count[ip]}}‘/home/webserver/nginx/logs/access.log

统计网站每个IP访问量

另:文件比较工具 diff

diff参数用法

-b 忽略一行当中的空格

-B 或略空白行

-i 忽略大小写的不同

用法:diff [-bBi] 文件1 文件2即可  (也可比较目录)

时间: 2025-01-06 02:09:40

正则表达式 awk笔记的相关文章

Sed&amp;awk笔记之sed篇(转)

Sed是什么 <sed and awk>一书中(1.2 A Stream Editor)是这样解释的: Sed is a "non-interactive" stream-oriented editor. It is stream-oriented because, like many UNIXprograms, input flows through the program and is directed to standard output. Sed本质上是一个编辑器,

正则表达式学习笔记---揭开正则表达式的神秘面纱

正则表达式学习笔记 如果我们问那些UNIX系统的爱好者他们最喜欢什么,答案除了稳定的系统和可以远程启动之外,十有八九的人会提到正则表达式:如果我们再问他们最头痛的是什么,可能除了复杂的进程控制和安装过程之外,还会是正则表达式.那么正则表达式到底是什么?如何才能真正的掌握正则表达式并正确的加以灵活运用?本文将就此展开介绍,希望能够对那些渴望了解和掌握正则表达式的读者有所助益. 入门简介 简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具.我们可以在几乎所有的基于UNIX系统的工具中找到

Sed&amp;awk笔记之awk篇

http://blog.csdn.net/a81895898/article/details/8482333 Awk是什么 Awk.sed与grep,俗称Linux下的三剑客,它们之间有很多相似点,但是同样也各有各的特色,相似的地方是它们都可以匹配文本,其中sed和awk还可以用于文本编辑,而grep则不具备这个功用.sed是一种非交互式且面向字符流的编辑器(a "non-interactive" stream-oriented editor),而awk则是一门模式匹配的编程语言,因为

Sed&amp;awk笔记之sed篇

http://blog.csdn.net/a81895898/article/details/8482387 Sed是什么 <sed and awk>一书中(1.2 A Stream Editor)是这样解释的: Sed is a "non-interactive" stream-oriented editor. It is stream-oriented because, like many UNIXprograms, input flows through the pr

《精通正则表达式》笔记 --- 选择引号内的文字

这个例子出自<精通正则表达式>,做一下笔记帮助理解和记忆. 第一版 最简单的case就是考虑包含一对引号,那么写出来的表达式应该是这样的: ".*" 但是这个未免太简单了吧,会有啥问题呢?假如输入的字符串长这样结果就会出问题拉.see... Input String: "Hello" and "World" Regex: ".*" Match: "Hello" and "World&q

《精通正则表达式》笔记 --- “验证”Email格式

写一个正则表达式的三个步骤: 理解需求并找出你需要验证的数据的特征: 写一个还可以用的正则表达式: 看看能不能达到你的目的,同时想想会不会匹配到一些不想要的数据: [可选]性能优化 我觉得写一个正则表达式可以简单的分为这么几个步骤. 好了,现在要验证一个电子邮件的地址的合法性. 首先,一般我们会在一些注册的时候验证用户输入的邮箱是否合法,但是我们在这一步能够做的验证其实是很少很少的,因为我们只能够保证用户输入的是一个合法的邮箱.但是我们没办法保证输入的是一个有效的邮箱,唯一验证邮箱是否有效的方法

正则表达式学习笔记系列----1

正则表达式是一种字符模式,在匹配文本文件的内容的时候,使用一组特殊的符号,匹配出我们想要的内容. 为什么用正则表达式 搜索(匹配)出我们想要的看到的精简的内容. 正则表达式的元字符: 元字符 功能 样例 匹配样例 ^       行首定位符           /^root/ 匹配以root开头的行 $         行尾定位符           /bash$/ 匹配以bash结尾的行 .         匹配单个字符       /l.ve/ 匹配love,live等等,在l和v中间有一个

JavaScript正则表达式学习笔记之一 - 理论基础

自从年前得空写了两篇文章之后就开始忙了,这一忙就是2个月??.当时信誓旦旦说的定期写篇博客的计划也就泡汤了??,不过好在最近有空,顺便总结一下这两个月遇到的几个问题.第一个问题就是项目中用到了一些正则才发现之前被自己忽略的正则是时候补一补了.恰逢今天周六??,就把自己学习JavaScript正则表达式的笔记整理成文,写了这篇关于正则表达式理论基础的文章,希望本文能对有需要的同学提供帮助.号外:本文相对基础,大神请忽略??. 一. 基本概念 正则表达式是用于匹配字符串中字符组合的模式. 一种几乎可

sed awk 笔记(二)

都说sed awk 运维人员的必备工具.今天起开始整理相关笔记.首先认识一下这两个东西. 共性:使用相同的语法 [address]/pattern/action/flag 都是面向字符流的.从一个文件一次银行的读取输入.并输出到标准输出.即输入驱动的 都是使用正则表达式进行模式匹配的 都允许用户在脚本中指定指令 所以个人认为有几个方面需要突破:语法.正则.编写脚本的思路 [[email protected] test]#今天写的脚本显示洲及所在州的人名 #! /bin/sh awk -F ",&