awk -F"分隔符" "command" filename

awk -F":" '{print $1}' /etc/passwd

字段引用:

$1代表第一列;
$2代表第二列;
$0代表所有列。

内置变量:

FS  代表输入的分隔符,等同于-F
OFS  代表输出的分隔符
NF  代表字段数,因为NF是列数,所以$NF代表最后一列
NR  代表当前处理第几行

关系操作符:

==  等于
!=  不等于
>  大于
<  小于
>=  大于等于
<=  小于等于

逻辑操作符

&&  逻辑与,类似于shell的[ 条件1 -a 条件2 ]
||  逻辑或,类似于shell的[ 条件1 -0 条件2 ]
!  非

运算符

+ - * /
^或**  幂

awk可以运算浮点数

echo $[1.2*3]  #错误
echo | awk '{print 1.2*3}'  #正确

练习

截取所有开放监听的TCP协议端口号
netstat -ntl | awk 'NR>2 {print $4}' |awk -F: '{print $NF}' /etc/passwd文件
截取前五行的倒数第二列
awk -F: 'NR<=5 {print $(NF-1)}' /etc/passwd
打印第五行
awk -F: 'NR==5 {print $0}' /etc/passwd
打印第五行第五列
awk -F: 'NR==5 {print $5}' /etc/passwd
awk -F: '{if (NR==5) print $5}' /etc/passwd
打印第五行和第六行
awk -F: 'NR==5 || NR==6 {print $0}' /etc/passwd
awk -F: 'NR>=5 && NR<=6 {print $0}' /etc/passwd
打印每行的列数
awk -F: '{print "第"NR"行有"NF"列"}' /etc/passwd
打印奇数行,并加上行号
awk 'NR%2==1 {print NR,$0}' /etc/passwd 截取IP地址,-F后[.:]表示以.或:做分隔符
ifconfig |grep Bcast|awk -F[.:] '{print $2}'

时间可以直接比较

cat test.txt
A 2016-11-15 19:20:12
B 2016-11-15 18:12:31
C 2016-11-15 17:58:59 找出18:30之前的记录
awk '$3<"18:30:00" {print $0}' test.txt 注:时间必须写成09:00:00,不能写成9:00:00

BEGIN和END

awk -F: 'BEGIN{处理文件前执行的代码块,可以用于赋值或者打印首行表头} {处理文件过程中的代码块,行处理} END{处理文件后的代码块}' file

printf格式化输出

%s    代表字符串
%d 代表十进制数字 ls -l /etc |awk 'NR>1 {print $5,$NF}'
ls -l /etc |awk 'NR>1 {printf("%d %s\n",$5,$NF)}' 结果同上
ls -l /etc |awk 'NR>1 {printf("%4d %s\n",$5,$NF)}' $5保留4位
ls -l /etc |awk 'NR>1 {printf("%04d %s\n",$5,$NF)}' $5保留4位,不足4位用0补齐

字符匹配

== 完全精确匹配
~ 匹配
!~ 不匹配
!= 不相等 awk -F: '$1=="root" {print $0}' /etc/passwd
awk -F: '$1~"oo" {print $0}' /etc/passwd
awk -F: '$1!~"oo" {print $0}' /etc/passwd
 

字符串函数

长度函数length()
echo 12345| wc -L
echo 12345| awk '{print length($0)}' 大小写转换
toupper() 转大写
tolower() 转小写
awk -F: '{print tolower(toupper($1))}' /etc/passwd 位置函数index()
awk '$0~"ss" {print index()$0,"ss"}' /etc/passwd
算出ss在那一行的字符位置 截取函数substr()
awk -F: '{print substr($1,1,2)}' /etc/passwd
把$1从第一个字符起,截取2个字符 echo 123456789ss987654321 | awk '{print substr($0,index($0,"ss"),4)}'
结果:ss98

shell——awk的更多相关文章

  1. Shell awk文本处理,shell脚本编写

    Shell awk文本处理,shell脚本编写 一:内容包含awk.变量.运算符.if多分支 <a>语法糖: awk [options] 'commands' files option - ...

  2. shell awk入门

    本文参考自 http://www.cnblogs.com/zhuyp1015/archive/2012/07/11/2586985.html awk:好用的数据处理工具 awk 也是一个非常棒的数据处 ...

  3. linux shell awk 流程控制语句(if,for,while,do)详细介绍

    在linux awk的 while.do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出.break中断当前正在执行的循环并跳到循环 ...

  4. 转 shell awk 使用详解

    awk简介 awk: 中文意思是报告生成器 能够根据我们输入的信息,将信息格式化以后显示,将定义好的信息以比较美观(直观)的方式显示出来出现比较早,继而出现了new awk(nawk)在windows ...

  5. [转]shell awk 入门,中级,高级使用

    awk很常用,对于我们在shell中分析log和file很有好处,很实用的东西,大家一起分享学习- 作为技术支持工程师,我们最最经常的工作就是要处理文本文件,不管是什么数据库最后都可以导成文本,我们就 ...

  6. [转]shell awk sed tr grep 语法汇总

    tr 基本语法 -c          # 用字符串1中字符集的补集替换此字符集,要求字符集为ASCII  -d          # 删除字符串1中所有输入字符  -s          # 删除所 ...

  7. [SHELL]awk的用法举例

    从初学awk到现在小有所成,非常感谢CUers的帮助,总结了下自己曾经遇到的问题和犯的错误,供初学者借鉴,因本人非计算机专业,对专业词汇可能有表述不对的地方,还请指正和补充! 1. awk '{cod ...

  8. Linux shell awk数组使用

    awk中使用数组 一.数组格式 数组是一个包含一系列元素的表. 格式如下:     abc[1]="xiaohong"     abc[2]="xiaolan" ...

  9. Linux shell awk模式使用

    awk的PATTERN表示方法: 1,正则表达式,格式为/regex/ 以冒号为分隔符,显示/etc/passwd以r开头的行的第一段 [root@wei awk]# awk -F: '/^r/{pr ...

随机推荐

  1. Vim常用命令

    一.插入命令 a 在光标所在字符后插入A 在光标所在行尾插入i 在光标所在字符前插入I 在光标所在行首插入o 在光标下插入新行O 在光标上插入新行 二.定位命令 :set nu 设置行号:set no ...

  2. 使用nwjs开发桌面应用之Hello,World!

    今天发现原来JavaScript也可以用来开发桌面应用程序,顿时有一种很牛逼的感觉,于是马上就开始了Hello,World!,感受一下JavaScript的强大. 可以用来开发桌面应用的js框架有三种 ...

  3. 【.net 深呼吸】写入日志文件

    记录日志,一方面可以把日志写入系统的日志存储中,可在“事件查看器”窗口中查看:如果不喜欢写到系统的日志文件中,也可以写到自己定义的文件中. 其实,日志文件就是文本文件,可能有朋友会想到用写入文本文件的 ...

  4. 关于SVG的viewBox

    在SVG中,通过svg标记的 width和height可以规定这段SVG代码所表达的数据在绘制时所占用的空间大小 如下代码svg设置了宽度与高度,rect同样,所以结果自然是全屏 <svg wi ...

  5. Python下载网页的几种方法

    get和post方式总结 get方式:以URL字串本身传递数据参数,在服务器端可以从'QUERY_STRING'这个变量中直接读取,效率较高,但缺乏安全性,也无法来处理复杂的数据(只能是字符串,比如在 ...

  6. C#:浅析结构与类的区别

    一.      结构:值类型,存储在堆栈中,位于计算机的内存逻辑区域中      类   :引用类型,存储在堆中,位于计算机内存的不同逻辑位置   二.      较小的数据使用结构:      将一 ...

  7. Oracle基础维护01-常用管理命令总结

    概览: 1.Oracle 内存管理 2.Oracle 数据库启动关闭 3.Oracle 参数文件 4.Oracle 控制文件 5.Oracle redo日志文件 6.Oracle undo表空间管理 ...

  8. CLR via C# 摘要二:IL速记

    最简单的IL程序 .assembly test {} .method void Func() { .entrypoint ldstr "hello world" call void ...

  9. .NET 实现并行的几种方式(四)

    本随笔续接:.NET 实现并行的几种方式(三) 八.await.async - 异步方法的秘密武器 1) 使用async修饰符 和 await运算符 轻易实现异步方法 前三篇随笔已经介绍了多种方式.利 ...

  10. 学习Redis你必须了解的数据结构——JS实现集合和ECMA6集合

    集合类似于数组,但是集合中的元素是唯一的,没有重复值的.就像你学高中数学的概念一样,集合还可以做很多比如,并集,交集,差集的计算.在ECMA6之前,JavaScript没有提供原生的Set类,所以只能 ...