一个不会coding的girl Linux日常之命令awk
Linux日常之命令awk
参考:http://www.zsythink.net/archives/tag/awk/
一. 命令awk简介
1. awk是一种编程语言,用于对文本和数据进行处理的
2. 具有强大的文本格式化能力
3. 利用命令awk,可以将一些文本整理成为我们想要的样子
4. 命令awk是逐行进行处理的
二. grep、sed、awk的简单比较
1. 命令grep,更适合单纯的查找或匹配文本
2. 命令sed,更适合对匹配到的文本进行编辑
3. 命令awk,更适合文本格式化,对文本进行较复杂的格式处理
三. 命令awk基本语法
awk [options] 'pattern{action}' file
1. 在没有options和pattern的情况下,使用命令awk
2. pattern包括两种特殊模式,分别是BEGIN和END
(1)BEGIN模式,是指命令在处理文本之前执行
(2)END模式,是指命令在处理文本之后执行
(3)BEGIN模式和END模式同时存在时,其中,BEGIN与END之间的{}相当于一个循环体,对文件中的每一行进行处理
3. 常用的参数
(1)-F,用于指定输入分隔符
(2)-v,用于设置变量的值
从文件中输入变量
四. 变量
awk中的变量分为内置变量和自定义变量两种
1. 内置变量
FS | 输入字段分隔符,默认为空白字符 |
OFS | 输出字段分隔符,默认为空白字符 |
RS | 输入记录分隔符(输入换行符),指定输入时的换行符 |
ORS | 输出记录分隔符(输出换行符),指定输出时的换行符 |
NF | 当前行的字段数(当前行被分隔符分割成了几段) |
NR | 当前行的行号 |
FNR | 不同文件分别计数 |
FILENAME | 当前文件名 |
ARGV | 数组,保存的是命令行所给定的各参数 |
ARGC | ARGC数组的个数 |
(1)FS:以“:”为字段输入分隔符,输出第1列和第2列
1)使用-F选项指定输入分隔符
2)使用内置变量FS指定输入分隔符,需要注意的是,使用变量时,要使用-v选项来指定对应的变量
(2)OFS:以“#”为字段输出分隔符,输出第1列和第2列
(3)RS:以“:”为行输入分隔符,输出对应的行号和当前行内容。
需要注意的是,两个红框中的内容,由于Jack和DEF、Alice和GHI之间没有“:”,所以在awk中被认作为同一行
(4)ORS:以“---”为行输出分隔符
(5)NF:当前行的字段数
其中,$NF表示的是最后一个字段的内容,$(NF-1)表示的是倒数第二个字段的内容
(6)NR:当前行号
(7)FNR:不同文件分别计数
(8)FILENAME:显示当前行的文件名
(9)ARGV:数组,保存的是命令行所给定的各参数
(10)ARGC:保存的是ARGV数组的个数
2. 自定义变量
(1)使用-v来自定义变量(在上第三节已介绍)
(2)在awk中直接定义
五. 格式化中,awk使用printf时需要注意的问题
1. 使用printf输出的文本不会换行,如果需要换行,可以在对应的“格式替换符”后加入“\n”进行转义
2. 使用printf输出时,“指定的格式”与“被格式化的文本”之间,要用“,”隔开
3. 使用printf输出时,“格式”中的“格式替换符”必须与“被格式化的文本”一一对应(个数要相同)
六. awk中的pattern模式
当awk进行逐行处理时,会把pattern作为条件,判断当前行是否满足条件,若跟pattern匹配,则进行后面的处理,否则,跳过当前行。
1. 正则表达式
awk下的正则表达式与grep下的区别:
1)awk下: awk '/正则表达式/{print}' /etc/passwd
2)grep下: grep "正则表达式" /etc/passwd
需要注意的是
1)在awk的正则表达式中,若出现"/",则需要进行转义,在其前面加"\"
2)当使用{x,y}类型次数匹配的正则表达式时,需要使用--posix选项或--re-interval选项
2. 行范围匹配
awk '/正则表达式1/,/正则表达式2/{action}' file
表示的是,从被正则表达式1匹配到的行开始,到被正则表达式2匹配到的行结束,之间所有的行都会执行对应的动作。
七. 关系运算符
关系运算符 | 含义 | 用法实例 |
< | 小于 | x<y |
<= | 小于等于 | x<=y |
> | 大于 | x>y |
>= | 大于等于 | x>=y |
== | 等于 | x==y |
!= | 不等于 | x!=y |
~ | 匹配 | x~/正则表达式/ |
!~ | 不匹配 | x!~/正则表达式/ |
八. 条件判断
1
2
3
4
5
6
|
if (表达式) {语句1} else if (表达式) {语句2} else {语句3} |
实例
1
2
3
4
5
6
7
8
9
10
11
12
|
awk 'BEGIN{ test =100; if ( test >90){ print "very good" ; } else if ( test >60){ print "good" ; } else { print "no pass" ; } }' |
九. 循环语句
1. while循环语句
1
2
|
while (表达式) {语句} |
实例
1
2
3
4
5
6
7
8
9
|
awk 'BEGIN{ test =100; total=0; while (i<= test ){ total+=i; i++; } print total; }' |
2. for循环语句
1)第一种
1
2
|
for (变量 in 数组) {语句} |
2)第二种
1
2
|
for (变量;条件;表达式) {语句} |
3. do循环语句
1
2
3
|
do {语句} while (条件) |
posted on 2017-12-01 18:41 一个不会coding的girl 阅读(3314) 评论(0) 编辑 收藏


Powered by:
博客园
Copyright © 一个不会coding的girl
一个不会coding的girl Linux日常之命令awk的更多相关文章
- Linux日常之命令awk
参考:http://www.zsythink.net/archives/tag/awk/ 一. 命令awk简介 1. awk是一种编程语言,用于对文本和数据进行处理的 2. 具有强大的文本格式化能力 ...
- 10 程序员必备:Linux日常维护命令
一.服务器硬件配置 1.查看硬盘及分区情况 # fdisk -l 2.查看分区空间使用情况 可以查看各分区大小.已使用.可用.已使用百分比.挂载情况 1)默认单位为K # df 2)可读性更好的显示, ...
- Linux日常维护命令
对于程序员来说,掌握一些基本的Linux命令是必不可少的,即使现在用不到,在不久的将来也应该会用到.由于Linux有很多命令,每个命令基本可以用一篇文章介绍,所以本文仅总结一些常用命令的常用用法,如有 ...
- Linux日常使用命令
pwd 当前目录的路径ls -a 显示隐藏文件ls -l h* 显示所有以h开头的文件ls -d b* 显示所有以b开头的文件夹ls -l *.log 所有后缀是.log 的文件dir 显 ...
- Linux 日常维护命令
1 防火墙配置 1)重启后生效 开启: chkconfig iptables on 关闭: chkconfig iptables off 或者 /sbin/chkconfig --level ...
- Linux日常之命令sort
素材借鉴:https://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html 命令sort 是Linux中常用的排序命令,属于管道命令. 常 ...
- Linux日常之命令sed
一. 命令sed简介 利用命令sed能够同时处理多个文件多行的内容,可以不对原文件改动,仅把匹配的内容显示在屏幕上,也可以对原文件进行改动,但是不会在屏幕上返回结果,若想查看改动后的文件,可以使用命令 ...
- Linux日常之命令grep
命令grep简介 利用该命令在文本中查找指定的字符串,是Linux中最常用的文本处理工具之一. 命令grep与正则表达式结合使用时,功能会非常强大. 命令grep会在文本文件中按照指定的正则表达式进行 ...
- linux 日常使用命令
●安装和登录命令:login.shutdown.halt.reboot.mount.umount.chsh ●文件处理命令:file.mkdir.grep.dd.find.mv.ls.diff.cat ...
随机推荐
- 第二十三篇 玩转数据结构——栈(Stack)
1.. 栈的特点: 栈也是一种线性结构: 相比数组,栈所对应的操作是数组的子集: 栈只能从一端添加元素,也只能从这一端取出元素,这一端通常称之为"栈顶": 向栈中添加元 ...
- Bugku-CTF加密篇之python(N1CTF) [HRlgC2ReHW1/WRk2DikfNBo1dl1XZBJrRR9qECMNOjNHDktBJSxcI1hZIz07YjVx]
python(N1CTF)
- [LEETCODE] 初级算法/数组 1.3旋转数组
原题: 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右 ...
- APP测试用例
日程管理APP测试用例 测试编号 测试用例 实际结果 期望结果 测试结果(Pass/Failed) 备注 NO.1 输入正确的用户名和密码点击登录 登录成功 登录成功 Pass NO.2 点击注册界面 ...
- 【PAT甲级】1112 Stucked Keyboard (20分)(字符串)
题意: 输入一个正整数K(1<K<=100),接着输入一行字符串由小写字母,数字和下划线组成.如果一个字符它每次出现必定连续出现K个,它可能是坏键,找到坏键按照它们出现的顺序输出(相同坏键 ...
- Linux centos7 shell 介绍、 命令历史、命令补全和别名、通配符、输入输出重定向
一.shell介绍 shell脚本是日常Linux系统管理工作中必不可少的,不会shell,就不是一个合格管理员. shell是系统跟计算机硬件交互使用的中间介质,一个系统工具.实际上在shell和计 ...
- P&R 7
Floorplan: 要做好floorplan需要掌握哪些知识跟技能? 通常,遇到floorplan问题,大致的debug步骤跟方法有哪些? 如何衡量floorplan的QA? [哥简单点说]:flo ...
- js实现上移下移
直接上代码 //上移 var $up = $(".up") $up.click(function () { var $tr = $(this).parents("tr&q ...
- 我的18vps~
自从买了18vps的香港虚拟主机后,就面临一个问题,浏览器无法访问它的apache服务,后来发现,需要同时开启nginx服务: /usr/local/nginx/sbin/nginx -c /usr/ ...
- ThreadLocal是什么?
早在JDK 1.2的版本中就提供Java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地编写出优美的多线程程序. 当使 ...