linux 三剑客之awk
AWK命令
基础显示
打印install.log文件中包含data字段行的第二区域
awk ‘/data/ {print $2}’ install.log
查看num10.txt的第一行
head -n 1 num10.txt
结果:10
cat !$  #cat上次打开的文件,cat num10.txt
awk只显示第一行:
NR number of row 第几行
AWK读取文件是一行一行读取;
awk 'NR==1' num10.txt
结果:10
awk打印最后一行:
awk 'END{print $0}' num10.txt
结果: 1 最后一行
显示最后一列:
NF number of fields 列
awk -F ' ' '{print $NF}' qqq
结果:
lll
222
不显示第一行
awk 'NR != 1' num10.txt
不显示最后一列
awk -F ' ' 'BEGIN{OFS="---"}{print $1,$2,$3}' qqq
结果:
123---123---c
1fsda---ddd3---222
ORS,默认每一行结束之后是换行符
awk -F " " 'BEGIN{OFS="";ORS=""}{for(i = 1;i < NF; i++){print $i" "}{printf "\n"}}' qqq
123 123 c
1fsda ddd3 222
基础运算
突然想起用python解决,来两个实例~
现在有文件qqq,内容如下:
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
实例1:(求每行的和)
with open("qqq") as f:
	j = 0
    for line in f:  # line 是字符串数据类型。
        li = line.strip().split()  # split生成列表数据
        sum = 0
        for i in li:
            sum += int(i)
            # print(line,sum)
		j += 1
        print(j,sum)
结果:
1 15
2 20
3 25
实例2:(求所有值的和)
with open("qqq") as f:
    sum = 0
    for line in f:  # line 是字符串数据类型。
        li = line.strip().split()  #split生成列表数据
        for i in li:
            sum += int(i)
    print(sum)
结果:
60
字符匹配
现在有文件grade,内容如下:
john 10 3  78 94 88
andrea 20 90 75 90 86
jasper 90 450 90 92 84
sun 60 50 80 98 87
打印第一列为sun的行
awk  '{if($1 == "sun")print $0}' grade
结果:
sun 60 50 80 98 87
打印第一列长度大于4,第二列大于40的行。
awk '{if (length($1) > 4 && $2 > 40) print $0}' grade
jasper 90 450 90 92 84
awk 不指定-F,就是默认空格或者table来分割。
正则匹配: ~
awk  '{if($1 ~ "su")print $0}' grade
结果:
sun 60 50 80 98 87
11. 匹配noarch字段,如果有,则显示整行
$awk ‘$2 ~ /noarch/’ install.log
12. 匹配不存在noarch字段的行,如果有,
则显示整行
$awk ‘$2 !~ /noarch/’ install.log
流程控制
两个单引号之间可以有多个{},if语句示例如下
示例1: /etc/passwd 把root改成admin,别的是common user的列表。
awk -F: '{
if ($1 == "root")
	printf "%-15s: %s\n", $1,"Admin"
else
	print "%-15s: %s\n", $1,"Common User"
}' /etc/passwd
示例2:有多少个普通用户,UID > 1000
awk -F: -v sum=0 '{    # sum=0  这里不能有空格
if ($3 > 1000)
  sum++
}END{
  print sum
}'  /etc/passwd
结果:
47
流程如下、
if流程
If
'{if(条件){action}}'
for 流程
for
'{for (条件) {action}}'
练习:打印最后一列小于等于6的所有行/他的值(还是用python吧。。。。)
with open("qqq") as f:
    for line in f:
        print(line.strip(),type(line.strip()))  # line in f 中 line 是字符串,strip()去掉换行符。
        li = line.strip().split()
        a = int(li[-1])
        if a > 6:
            pass
            # print(line)
            # print(a)
        else:
            pass
结果:
1 2 3 4 5 <class 'str'>
2 3 4 5 6 <class 'str'>
3 4 5 6 7 <class 'str'>
awk '{if ($NF <= 6) print $0}' qqq  #AWK一条命令解决
AWK命令格式
awk 指令是由模式,动作,或者模式和动作的组合组成。
'pattern {action}'
pattern 即模式,也可以理解为条件,你要找谁,高矮,胖瘦,等,都是条件。
action:即动作,可以理解为干啥,找到人之后你要干嘛
AWK执行过程
a) awk屈辱第一行内容
b) 判断是否符合模式中得条件,匹配则执行action,不匹配,继续读取下一行
c) 继续读取下一行
d) 直到读取到最后一行(EOF end of file)
域与记录详解
field 域,区域,字段 $1,$2等,表示第一个字段,第二个字段等。
record 记录,可以理解为一整行
内置变量:
RS == record seperator 即行得分隔符
NR == number of record 行号
ORS == output record seperator 输出时候得分隔符
awk得正则匹配
^cool 匹配所有以cool开头得字符串
cool$ 匹配所有以cool结尾得字符串
a+b 匹配一个或多个a 加上b得行
ifconfig eth0 |awk -F "[ :]+" 'NR==2 {print $3 }'
ifconfig eth0 | awk -F "netmask|broadcast" 'NR==2{print $3}'
怎么匹配1,不匹配到11:
awk --posix -F: '$3~/1{2,}/{print $0}' test.awk    出现两次得可以出来,写成{1,} 也还是都出来了
awk -F: '$3~/\<1\>/{print $0}' test.awk
\< 或 \b:词首锚定;用于单词模式的左侧;
\> 或 \b:词尾锚定;用于单词模式的右侧;
\<PATTERN\>:匹配整个单词;
netstat -lantp | awk -F "[:/ ]+" '{print $5,"\t",$10}'| sort 查询服务得端口
BEGIN和END模块详解
找空行:
grep -c '^$' test.awk
awk -v a=0 '/^$/{a=a+1}END{print a}' test.awk
awk -v a=0 -F: '$3>=5{a=a+1;(用;号分割)print a(a++)}END{print a}' test.awk												
											linux 三剑客之awk的更多相关文章
- Linux实战教学笔记18:linux三剑客之awk精讲
		
Linux三剑客之awk精讲(基础与进阶) 标签(空格分隔): Linux实战教学笔记-陈思齐 快捷跳转目录: * 第1章:awk基础入门 * 1.1:awk简介 * 1.2:学完awk你可以掌握: ...
 - (转)不看绝对后悔的Linux三剑客之awk实战精讲
		
原文:http://blog.51cto.com/hujiangtao/1923930 一.Linux三剑客之awk命令精讲 第1章 awk基础入门 1.1 awk简介 awk不仅仅时linux系统中 ...
 - day16 Linux三剑客之awk
		
day16 Linux三剑客之awk 1.什么是awk,主要作用是什么? 什么是awk,主要作用是什么? awk 主要用来处理文件,将文本按照指定的格式输出.其中包含变量,循环以及数组. 2.awk的 ...
 - 磁盘分区 & Linux 三剑客之 awk
		
今日内容 磁盘分区 Linux 三剑客之 awk 内容详细 一.磁盘分区 磁盘分区 --> 挂载 步骤 1.关机 2.添加硬盘 3.创建分区 fdisk /dev/sdb or gdisk /d ...
 - Linux 三剑客之 awk 实战详解教程
		
我们知道 Linux 三剑客,它们分别是:grep.sed.awk.在前边已经讲过 grep 和 sed,没看过的同学可以直接点击阅读,今天要分享的是更为强大的 awk. sed 可以实现非交互式的字 ...
 - 一篇文章带你学会Linux三剑客之一:awk
		
awk是一种用于处理文本.模式匹配的编程语言.与sed和grep,俗称Linux下的三剑客.学会 awk 等于你在 Linux 命令行里,又多了一种处理文本的选择.这篇文章重点教你如何使用,看完这篇文 ...
 - Linux三剑客之awk命令
		
awk简介 awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母.实际上 AWK 的确拥有自己的语言: AWK 程 ...
 - 详解Linux三剑客之awk
		
第一篇 awk简介与表达式实例 一种名字怪异的语言 模式扫描和处理,处理数据和生成报告. awk不仅仅是linux系统中的一个命令,而且是一种编程语言:它可以用来处理数据和生成报告(excel):处理 ...
 - Linux三剑客之awk精讲(基础与进阶)
		
第1章 awk基础入门 要弄懂awk程序,必须熟悉了解这个工具的规则.本实战笔记的目的是通过实际案例或面试题带同学们熟练掌握awk在企业中的用法,而不是awk程序的帮助手册. 1.1 awk简介 一种 ...
 - Linux三剑客之awk
		
awk awk是linux下的一个命令,他对其他命令的输出,对文件的处理都十分强大,其实他更像一门编程语言,他可以自定义变量,有条件语句,有循环,有数组,有正则,有函数等.他读取输出,或者文件的方式是 ...
 
随机推荐
- iOS push新的调用方法
			
// IOS8 新系统需要使用新的代码if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0){ [[UIAppl ...
 - ES6 中 let and const
			
let 和 const 命令 let 命令 基本用法 ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. { let a = 10; v ...
 - VSFTPD虚拟用户配置
			
转载:http://www.cnblogs.com/allenjin/archive/2011/12/03/2274542.html 以下操作验证OK!!!! VSFTPD虚拟用户配置 VSFTP = ...
 - idea下使用lombok
			
转载 https://blog.csdn.net/u013177446/article/details/53943365 (1)pom引入依赖 <dependency> <group ...
 - 2018.11.24 poj3693Maximum repetition substring(后缀数组)
			
传送门 后缀数组好题. 考虑枚举循环节长度lenlenlen. 然后考虑枚举循环节的起点来更新答案. 但是直接枚举每次O(n)O(n)O(n). 考虑枚举len∗k+1len*k+1len∗k+1作为 ...
 - 2018.11.01 NOIP训练 cost数(搜索+容斥原理)
			
传送门 唉考试的时候忘记剪倍数的枝了666666分滚粗. 其实就是一直取lcmlcmlcm搜索,然后容斥原理统计就行了. 代码
 - C# AOP框架入门(转)
			
出处:https://www.cnblogs.com/isaboy/p/Csharp_AOP_Log.html AOP面向切面编程(Aspect Oriented Programming),是通过预编 ...
 - oracle在exp导出时报错PLS-00201: identifier 'EXFSYS.DBMS_EXPFIL_DEPASEXP' must be declared
			
报错如下信息: EXP-00008: ORACLE error 6550 encounteredORA-06550: line 1, column 14:PLS-00201: identifier ' ...
 - vue中的静态路由
			
单页Web应用(single page web application,SPA),就是只有一张Web页面的应用.单页应用程序 (SPA) 是加载单个HTML 页面并在用户与应用程序交互时动态更新该页面 ...
 - form表单序列化为json格式数据
			
在web开发过程中,经常遇到将form序列化不能格式的字符串提交到后台,下面就介绍怎样将form表单序列化为json字符串. 首先,是扩展的jquery序列化插件,依赖jquery.经测试,这段代码可 ...